3

我们正在实现一个 .NET Core 3.1 API,我们正在使用 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 与标题中指定的不匹配”

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

4

1 回答 1

2

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

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

在线尝试示例

于 2020-11-18T07:40:34.073 回答