ASP.NET MVC Core 3.0 API列挙型を文字列にシリアル化


14

ASP.NET MVC Core 3.0でEnumフィールドをIntではなくStringにシリアル化する方法は?古い方法ではできません。

services.AddMvc().AddJsonOptions(opts =>
{
    opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter());
})

エラーが発生します:

「Newtonsoft.Json.Converters.StringEnumConverter」から「System.Text.Json.Serialization.JsonConverter」に変換できません


ASP.NET Core 3.0にはJSON.NETが含まれていないため、このコードを試す前にパッケージを明示的に追加する必要がありました
Panagiotis Kanavos

回答:


28

新しいSystem.Text.Jsonシリアル化

ASP.NET MVC Core 3.0は、組み込みのJSONシリアル化を使用します。使用System.Text.Json.Serialization.JsonStringEnumConverter(「Json」接頭辞付き):

services
    .AddMvc()
    // Or .AddControllers(...)
    .AddJsonOptions(opts =>
    {
        opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
    })

詳細はこちら。ドキュメントはここにあります

Newtonsoft.Jsonを使用する場合

「従来の」Newtonsoft.Jsonシリアル化を使用することもできます。

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));

6
Web APIがある場合は、代わりに.AddMvc()も使用できますservices.AddControllers().AddJsonOptions(...)
トビアス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.