【问题标题】:ASP.NET MVC Core API Serialize Enums to StringASP.NET MVC Core API 将枚举序列化为字符串
【发布时间】:2020-03-24 12:55:28
【问题描述】:

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

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

我收到一个错误:

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

【问题讨论】:

  • ASP.NET Core 3.0 不包含 JSON.NET,这意味着您必须在尝试此代码之前显式添加包

标签: c# asp.net-mvc asp.net-core-3.0 .net-core-3.0 system.text.json


【解决方案1】:

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

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

如果你更喜欢 Newtonsoft.Json

你也可以使用“传统的”Newtonsoft.Json 序列化:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

然后:

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

【讨论】:

  • 如果您有 Web API,那么您也可以使用 .AddMvc() 代替 services.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 上的属性?
  • 我发现这个网站很有帮助:jasongaylord.com/blog/2020/07/17/…
  • @drowhunter 如果您只想执行此操作或特定属性,您可以像 [JsonConverter(typeof(JsonStringEnumConverter))] public CategoryDto Category { get; set; } 一样在返回 DTO 中简单地注释属性。您将需要导入 using System.Text.Json.Serialization 命名空间
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-06-10
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多