ASP.NET Web APIはオブジェクトの(逆)シリアル化にJson.NETをネイティブに使用することを理解していますが、JsonSerializerSettings
使用するオブジェクトを指定する方法はありますか?
たとえばtype
、シリアル化されたJSON文字列に情報を含めたい場合はどうなりますか?通常、呼び出しに設定を挿入しますが.Serialize()
、WebAPIはそれをサイレントに実行します。手動で設定を挿入する方法が見つかりません。
ASP.NET Web APIはオブジェクトの(逆)シリアル化にJson.NETをネイティブに使用することを理解していますが、JsonSerializerSettings
使用するオブジェクトを指定する方法はありますか?
たとえばtype
、シリアル化されたJSON文字列に情報を含めたい場合はどうなりますか?通常、呼び出しに設定を挿入しますが.Serialize()
、WebAPIはそれをサイレントに実行します。手動で設定を挿入する方法が見つかりません。
オブジェクトのプロパティJsonSerializerSettings
を使用して、をカスタマイズできます。Formatters.JsonFormatter.SerializerSettings
HttpConfiguration
たとえば、Application_Start()メソッドでこれを行うことができます。
protected void Application_Start()
{
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Formatting =
Newtonsoft.Json.Formatting.Indented;
}
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
};
答えは、この2行のコードをGlobal.asax.csApplication_Startメソッドに追加することです。
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.All;