ASP.NET MVC 核心 API 将枚举序列化为字符串

ASP.NET MVC Core API Serialize Enums to String

如何在 ASP.NET MVC Core 3.0 中将 Enum 字段序列化为 String 而不是 Int?我无法以旧方式做到这一点。

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

我遇到一个错误:

cannot convert from 'Newtonsoft.Json.Converters.StringEnumConverter' to 'System.Text.Json.Serialization.JsonConverter'

新System.Text.Json连载

ASP.NET MVC Core 3.0 使用内置的 JSON 序列化。使用 System.Text.Json.Serialization.JsonStringEnumConverter(带有“Json”前缀):

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

更多信息here. The documentation can be found here

如果你喜欢Newtonsoft.Json

也可以使用“传统”Newtonsoft.Json序列化:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

然后:

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

一些补充:
如果使用 Newtonsoft.Json

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
services
    .AddControllers()
    .AddNewtonsoftJson(options =>
        options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()));

options.SerializerSettings.Converters

SerializerSettings 是必须的

如果您有 Minimal API 这将很有用:

using System.Text.Json.Serialization;

builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(opt =>
{
    opt.SerializerOptions.Converters.Add(new JsonStringEnumConverter());
});

如果您使用 Aspnet Core MVC 和最小 API 使用这个:

        services.Configure<Microsoft.AspNetCore.Mvc.JsonOptions>(o => o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));