Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC核心API将枚举序列化为字符串_C#_Asp.net Mvc_Asp.net Core 3.0_.net Core 3.0_System.text.json - Fatal编程技术网

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

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

如何在ASP.NET MVC Core 3.0中将枚举字段序列化为字符串而不是Int?我不能用老办法做这件事

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