ASP.NET MVC Core 3.0 API将枚举序列化为字符串

And*_*rei 0 c# asp.net-mvc asp.net-core-3.0 .net-core-3.0 system.text.json

如何在ASP.NET MVC Core 3.0中将Enum字段序列化为String而不是Int?我不能用旧的方式做。

services.AddMvc().AddJsonOptions(opts =>
{
    opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter());
})
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

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

gio*_*i02 22

如果你有一个,Minimal API这将会很有用:

using System.Text.Json.Serialization;

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


asa*_*f92 12

.NET 7.0引入了这样的方式:

builder.Services.ConfigureHttpJsonOptions(options => options.SerializerOptions.Converters.Add(new JsonStringEnumConverter()));
Run Code Online (Sandbox Code Playgroud)


小智 11

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

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

Run Code Online (Sandbox Code Playgroud)

options.SerializerSettings.Converters

SerializerSettings 是必要的


And*_*rei 5

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

services.AddMvc().AddJsonOptions(opts =>
{
    opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
})
Run Code Online (Sandbox Code Playgroud)

更多信息在这里。该文档可在此处找到。

  • 如果您有 Web API,那么您还可以使用 services.AddControllers().AddJsonOptions(...) 来代替 `.AddMvc()`。 (17认同)
  • 从 asp.net core 3.1 和 Microsoft.AspNetCore.Mvc.NewtonsoftJson 3.1.5 开始,有一个细微的变化: &lt;pre&gt; services.AddControllers() .AddNewtonsoftJson(opts =&gt; opts.SerializerSettings.Converters.Add(new StringEnumConverter( )));&lt;/前&gt; (14认同)
  • @drowhunter 如果您只想执行此操作或特定属性,您可以简单地在返回 DTO 中注释该属性,如下所示 `[JsonConverter(typeof(JsonStringEnumConverter))] public CategoryDto Category { get; 放; }`。您需要导入“using System.Text.Json.Serialization”命名空间 (8认同)

归档时间:

查看次数:

56 次

最近记录:

6 年,9 月 前