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
我们正在实施 .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