C# ASP.NET MVC核心API将枚举序列化为字符串
如何在ASP.NET MVC Core 3.0中将枚举字段序列化为字符串而不是Int?我不能用老办法做这件事C# ASP.NET MVC核心API将枚举序列化为字符串,c#,asp.net-mvc,asp.net-core-3.0,.net-core-3.0,system.text.json,C#,Asp.net Mvc,Asp.net Core 3.0,.net Core 3.0,System.text.json,如何在ASP.NET MVC Core 3.0中将枚举字段序列化为字符串而不是Int?我不能用老办法做这件事 services.AddMvc().AddJsonOptions(opts => { opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter()); }) 我得到一个错误: 无法从“Newtonsoft.Json.Converters.StringEnumConverter”转换 至“System
services.AddMvc().AddJsonOptions(opts =>
{
opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter());
})
我得到一个错误:
无法从“Newtonsoft.Json.Converters.StringEnumConverter”转换
至“System.Text.Json.Serialization.JsonConverter”
新System.Text.Json序列化
ASP.NET MVC Core 3.0使用内置JSON序列化。使用System.Text.Json.Serialization.JsonStringEnumConverter
(带“Json”前缀):
更多信息。可以找到文档
如果您喜欢Newtonsoft.Json
您还可以使用“传统”Newtonsoft.Json序列化:
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
然后:
services
.AddControllers()
.AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
一些补充:如果使用Newtonsoft.Json options.SerializerSettings.Converters
SerializerSettings
是必需的ASP.NET Core 3.0不包含JSON.NET,这意味着您必须在尝试此代码之前显式添加包如果您有Web API,则可以使用而不是.AddMvc()
您还可以使用服务.AddControllers().AddJsonOptions(…)
。从asp.net core 3.1和Microsoft.AspNetCore.Mvc.NewtonsoftJson 3.1.5开始,有一个小小的变化:services.AddControllers().AddNewtonsoftJson(opts=>opts.SerializerSettings.Converters.Add(new StringEnumConverter());如果我不想这样做怎么办?有没有办法在我的dto上作为一个属性来做这件事?我发现这个网站非常有用:@drowunter如果你想做这件事或一个特定的属性,你可以简单地在返回的dto中注释这个属性,就像这样[JsonConverter(typeof(jsonString-GenumConverter))]public categoryTo Category{get;set;}
。您需要使用System.Text.Json.Serialization导入名称空间
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
services
.AddControllers()
.AddNewtonsoftJson(options =>
options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()));