2016-10-17 13 views
1

にデフォルトのJSONのシリアル化を無効にJson.net変更またはASPNET WebフォームWebメソッド(ないAPIまたはMVC)でデフォルトの直列化を防止するために、どのようにasp.netのWebフォーム

using Newtonsoft.Json.Linq; 
using Newtonsoft.Json; 

[WebMethod] 
public static object MyMethod() 
{ 
    dynamic field1 = new JObject(); 
    field1.Alessio = "ciao"; 

    return JsonConvert.SerializeObject(field1);   
} 

出力は次のようになります。

{"d":"{\"Alessio\":\"ciao\"}"} 

連載がJから2回(適用されているので、代わりにそれは

{"d":"{ "Alessio ": "ciao"}"} 

する必要がありますsonConvert.SerializeObjectとデフォルトのシリアライザから)

この方法があります: - 単一のWebメソッドのデフォルトのシリアル化を無効にしますか? または - Json.Net serializarを使用してデフォルトのシリアライザを変更するのは、ページまたはメソッドのみですか? または - Json.Netでデフォルトシリアライザをグローバルに変更しますか?

プロジェクトはWebフォームアプリケーション(ないAPIまたはMVCアプリケーション)であり、WCFまたはのHttpHandler

+0

希望の出力は有効なJSONではありません。あなたは代わりに '{" d ":{" Alessio ":" ciao "}}'を意味しましたか? –

答えて

1

にWebMethodのを移動させるように意図されていない私は、自動防止するために、(「void」WebMethod属性を作っシリアライズ) を入力し、手動で正しいhttpヘッダーを設定するか、手動で作成してください。レスポンス:

[WebMethod] 
public static void MyMethod() 
{ 
    ..... 
    ... 
    .. 
    string result = JsonConvert.SerializeObject(_d); 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ContentType = "application/json"; 
    HttpContext.Current.Response.AddHeader("content-length", result.Length.ToString());    HttpContext.Current.Response.Flush(); 
    HttpContext.Current.Response.Write(result); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 
+0

これは私が知っているページとasmxのメソッドのデフォルトシリアライザをオーバーライドする唯一の方法です。 –