如何全局地将枚举序列化为字符串(而不是按每个枚举中的属性)?

时间:2019-11-06 20:13:52

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

我正在使用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中的模型类。

感谢帮助

1 个答案:

答案 0 :(得分:1)

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

安装following package,然后尝试添加转换器,如下所示:

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