レガシーasp.netコアアプリケーションのjsonシリアライザー設定はAddMvc().AddJsonOptions()
を追加することで設定されましたが、_asp.net core 3
_でAddMvc()
を使用していません。では、どうすればグローバルjsonシリアル化設定を設定できますか?
AddMvc
は、対応する IMvcBuilder
拡張メソッドを持つ AddJsonOptions
実装を返します。新しいスタイルのメソッドAddControllers
、AddControllersWithViews
、およびAddRazorPages
もIMvcBuilder
実装を返します。 AddMvc
でチェーンするのと同じ方法で、これらをチェーンします。
services.AddControllers()
.AddJsonOptions(options =>
{
// ...
});
ここでのoptions
はJson.NETではなく、新しいSystem.Text.Json
API。それでもJson.NETを使用したい場合は、 tymtamの回答 を参照してください。
これはまだMVCであり、Microsoft.AspNetCore.Mvc.NewtonsoftJson nugetパッケージが必要ですが、AddControllers
を使用すると言っていました。
From Add Newtonsoft.Json-based JSON format support から
_services.AddControllers().AddNewtonsoftJson(options =>
{
// Use the default property (Pascal) casing
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// Configure a custom converter
options.SerializerOptions.Converters.Add(new MyCustomJsonConverter());
});
_
JsonConvert.DefaultSettings = () => new JsonSerializerSettings (...)
JsonConvert.DefaultSettingsプロパティ
デフォルトのJsonSerializerSettingsを作成する関数を取得または設定します。デフォルト設定は、JsonConvertのシリアル化メソッド、およびJTokenのToObject()およびFromObject(Object)によって自動的に使用されます。デフォルト設定を使用せずにシリアル化するには、Create()でJsonSerializerを作成します。
Newtonsoftを追加する必要はありません。NetCore 3.0プロジェクトにNewtonsoft互換性パッケージを追加することにはかなりの問題があります。
参照 https://github.com/aspnet/AspNetCore/issues/13564
もちろん、現時点ではPascalCase
、NAという名前のプロパティを祝います...したがって、null
のPropertyNamingPolicy
はPascalCaseを意味しますが、明らかにあまり良くありません。
// Pascal casing
services.AddControllersWithViews().
AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});