64

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

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

我收到一个错误:

无法从“Newtonsoft.Json.Converters.StringEnumConverter”转换为“System.Text.Json.Serialization.JsonConverter”

4

2 回答 2

145

新的 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);
    })

更多信息在这里。文档可以在这里找到。

如果您更喜欢 Newtonsoft.Json

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

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

接着:

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
于 2019-11-28T21:03:49.937 回答
17

一些补充:
如果使用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有必要的

于 2020-09-11T03:16:58.143 回答