【问题标题】:How to serialize enum as string globally (not by attribute in each enum)?如何将枚举序列化为全局字符串(不是每个枚举中的属性)?
【发布时间】:2020-03-03 09:22:16
【问题描述】:

我正在开发 ASP.NET Core 3.0 Web API。许多端点返回 json 并带有枚举。枚举不序列化为字符串,而是作为默认整数。

我知道[JsonConverter(typeof(StringEnumConverter))] 属性。但我正在寻找一种解决方案,我会在全球范围内说“此 API 返回的每个枚举都应序列化为 string,而无需在每个枚举中手动声明我的模型中的属性”。

直到今天,我一直在使用 .NETCore2.1。我能够通过Newtonsoft.Json.Converters 和这个中间件实现这一目标:

        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
            .AddJsonOptions(op => { op.SerializerSettings.Converters.Add(new StringEnumConverter());});

此代码在.NETCore3.0 中不起作用,因此我正在寻找一种解决方案,该解决方案将始终将枚举全局转换为字符串,而无需更改或修饰NETCore3.0 中的模型类。

感谢您的帮助

【问题讨论】:

标签: c# asp.net-web-api .net-core asp.net-core-webapi asp.net-core-3.0


【解决方案1】:

在 .NET Core 3.0 中,默认情况下不再包含 Newtonsoft.JSON 包。

安装following package 并尝试像这样添加转换器:

services.AddMvc(...).AddNewtonsoftJson(opt => SerializerSettings.Converters.Add(new StringEnumConverter()));

【讨论】:

  • 谢谢,但我没有AddMvc()了。在熊 API 我们现在应该使用AddControllers()
  • @AdamWojnar AddNewtonsoftJson() 扩展方法也应该在那里可用。
猜你喜欢
  • 2012-02-27
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多