ぷろじぇくと、みすじら。

ASP.NET MVC Core 2.0が返すJSONをASP.NET Web APIと同様にPascal Caseにしたい

Created at:

ASP.NET MVC CoreのJSONシリアライズではプロパティ名をデフォルトで"camelCase"に変換して吐き出しますが、従来のASP.NET Web APIは"PascalCase"だったので移植する場合などに以前の挙動になってほしいということがあります。

幸いシリアライザの挙動を変更する手段が用意されているのでそこで変更できます。

StartupConfigureServicesでASP.NET MVCを利用するためAddMvcメソッドを呼び出しますが、その際に返ってきたIMvcBuilderAddJsonOptionsを呼び出すことで設定を変更できます。

ContractResolverというプロパティがシリアライズするときに使うリゾルバなのでこれを変更します。従来のASP.NET Web API相当のシリアライザはJSON.NETのデフォルトなのでDefaultContractResolverContractResolverとして設定すれば期待の挙動となります。

services
    .AddMvc()
    .AddJsonOptions(options =>
    {
        options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
    });

他にもJSONのシリアライズをカスタマイズしたい場合にはこの辺りで変更を加えたり、ContractResolverをカスタムしてあげればよいということになります。