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

如何在 ASP.NET MVC Core 3.0中将 Enum 字段序列化为 String 而不是 Int?我不能用老办法了。

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

我收到一个错误:

无法从“ Newton soft.Json.Converters.StringEnumConverter”进行转换 到‘ System. Text. Json. Serialization. JsonConverter’

46780 次浏览

新系统。文本。 Json 序列化

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

更多信息 给你。文档可以找到 给你

如果你喜欢牛顿软件的话

你也可以使用“传统的”Newton. Json 系列:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

然后:

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

一些补充:
如果使用 < strong > Newton soft. Json

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


选项。序列化设置。转换器

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()));