StringEnumConverter 用作属性但不是全局的

StringEnumConverter works as an attribute but not globally

我们正在实施 .NET Core 3.1 API 并且我们正在根据 this doc 使用 Microsoft.AspNetCore.Mvc.NewtonsoftJson。我们正在处理枚举,我们需要字符串表示而不是整数。我们正在使用 JsonConverter 属性来完成它,如下所示:

[JsonProperty("region")]
[JsonConverter(typeof(StringEnumConverter))]
public Region Region { get; set; }

我们正在尝试从 Startup.cs 开始在全球范围内进行,如下所示:

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

如果我们这样做,Cosmos DB 会抱怨

"PartitionKey extracted from document doesn't match the one specified in the header"

所以我们尝试删除除区域一以外的所有属性。所有其他不具有该属性的枚举都正确存储为字符串,但该区域仍然需要该属性才能工作。知道为什么会发生这种情况以及如何解决吗?

在netcore 3.1或更高版本中,您可以使用JsonStringEnumConverter:

 var options = new JsonSerializerOptions
        {            
            Converters = { new JsonStringEnumConverter() },
             //other options
        };

在线尝试Example