global.asax
でこのようなグローバルシリアライザー設定を設定しようとしています。
var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
formatter.SerializerSettings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.Objects,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
次のコードを使用してオブジェクトをシリアル化する場合、グローバルシリアライザー設定は使用されませんか?
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(JsonConvert.SerializeObject(page))
};
このようなグローバルシリアライザー設定を設定することはできませんか、何か不足していますか?
JsonConvert.DefaultSettings
トリックをしました。
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.Objects,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
受け入れられた答えは私にはうまくいきませんでした。 .netcoreで、私はそれを動作させました...
services.AddMvc(c =>
{
....
}).AddJsonOptions(options => {
options.SerializerSettings.Formatting = Formatting.Indented;
....
})
コンテンツでネゴシエートされた応答を返すことができ、フォーマッターの設定が有効になるように、アクションで次の操作を行うだけです。
return Request.CreateResponse(HttpStatusCode.OK, page);
シリアライザーを設定する場所については正しいです。ただし、要求されたコンテンツタイプのJSONを使用してサイトへの要求が行われる場合、そのシリアライザーが使用されます。 SerializeObjectを呼び出すときに使用される設定の一部ではありません。プロパティを介してglobal.asaxで定義されたJSONシリアル化設定を公開することで、この問題を回避できます。
public static JsonSerializerSettings JsonSerializerSettings
{
get
{
return GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
}
}
そして、このプロパティを使用して、コントローラー内でシリアル化を行うときにシリアル化設定を設定します。
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(JsonConvert.SerializeObject(page, WebApiApplication.JsonSerializerSettings))
};