MVC4 WebAPI (RTM - VS2012 RTM を今日インストールしたばかりですが、昨日 RC でこの問題が発生していました) を使用してオブジェクトを JSON としてシリアル化しようとしています。JSON 出力ですべての null をレンダリングしたいと思います。このような:
[{"Id": 1, "PropertyThatMightBeNull": null},{"Id":2, "PropertyThatMightBeNull": null}]
しかし、私が得ているのは
[{"Id":1},{"Id":2}]
この Q/A WebApi は null フィールドをシリアル化しないことがわかりましたが、答えがうまくいかないか、答えをどこに置くべきか把握できていません。
これが私が試したことです:
Global.asax.cs の Application_Start に、以下を追加しました。
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; json.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
これはエラーではなく(ないように見えます)、次に試したものを見ると実際に実行されるようです。
コントローラー メソッド (ApiController のサブクラス) に、以下を追加しました。
base.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; base.Configuration.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
#1 が実行されたと言います。これは、#2 の両方の値が、ステップ実行時にこれらの行が実行される前に既に設定されているためです。
絶望的な動きで(すべてのオブジェクトのすべてのプロパティを本当に装飾したくないため)、この属性をnullで存在しないプロパティに追加しようとしました:
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, NullValueHandling = NullValueHandling.Include)]
3 つすべてで、null プロパティが省略された同じ JSON が生成されます。
その他の注意事項:
- IIS(組み込みも試しました)、Windows 7、VS2012 RTMでローカルに実行しています。
- コントローラ メソッドは List を返します -- IEnumerable も試しました
- シリアル化しようとしているオブジェクトは pocos です。