77

ASP.NET Web APIはオブジェクトの(逆)シリアル化にJson.NETをネイティブに使用することを理解していますが、JsonSerializerSettings使用するオブジェクトを指定する方法はありますか?

たとえばtype、シリアル化されたJSON文字列に情報を含めたい場合はどうなりますか?通常、呼び出しに設定を挿入しますが.Serialize()、WebAPIはそれをサイレントに実行します。手動で設定を挿入する方法が見つかりません。

4

3 に答える 3

116

オブジェクトのプロパティJsonSerializerSettingsを使用して、をカスタマイズできます。Formatters.JsonFormatter.SerializerSettingsHttpConfiguration

たとえば、Application_Start()メソッドでこれを行うことができます。

protected void Application_Start()
{
    HttpConfiguration config = GlobalConfiguration.Configuration;
    config.Formatters.JsonFormatter.SerializerSettings.Formatting =
        Newtonsoft.Json.Formatting.Indented;
}
于 2012-11-07T17:17:08.623 に答える
43

JsonSerializerSettingsそれぞれに指定JsonConvertでき、グローバルデフォルトを設定できます。

オーバーロードのあるシングルJsonConvert

// Option #1.
JsonSerializerSettings config = new JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore };
this.json = JsonConvert.SerializeObject(YourObject, Formatting.Indented, config);

// Option #2 (inline).
JsonConvert.SerializeObject(YourObject, Formatting.Indented,
    new JsonSerializerSettings() {
        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
    }
);

Application_Start()Global.asax.csにコードを含むグローバル設定:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
     Formatting = Newtonsoft.Json.Formatting.Indented,
     ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

参照:https ://github.com/JamesNK/Newtonsoft.Json/issues/78

于 2013-09-16T16:27:58.270 に答える
1

答えは、この2行のコードをGlobal.asax.csApplication_Startメソッドに追加することです。

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = 
    Newtonsoft.Json.PreserveReferencesHandling.All;

参照:循環オブジェクト参照の処理

于 2016-08-19T03:49:12.743 に答える