我有多个模型,最终我编写了 JsonPropertyName 属性,但这变得非常烦人,所以我想在 program.cs 中全局初始化它。这是我添加的内容,认为它会自动处理转换:
builder.Services.AddControllers()
.AddJsonOptions(options =>
{
// Global settings: use the defaults, but serialize enums as strings
// (because it really should be the default)
options.JsonSerializerOptions.Converters.Add(
new JsonStringEnumConverter(JsonNamingPolicy.SnakeCaseLower, false));
});
但是,在我的模型中,如果我删除如下所示的属性:
[JsonPropertyName("state_id")]
public required int StateId {get; set;}
[JsonPropertyName("entity_name")]
public required string EntityName {get; set;}
并放弃 JsonPropertyName 我假设当使用 Ok() 将我的模型序列化到前端时,名称会自动调整为我的属性名称曾经的样子(小写蛇)。然而,它们仍然采用驼峰式命名,我不知道为什么。我还需要做些什么吗?
问题在于您没有将所需的命名策略配置为所有选项的属性命名策略。相反,您当前正在注册一个枚举到字符串转换器,该转换器仅用于枚举,并指定该转换器应如何将枚举成员名称转换为字符串值 json 元素的命名策略。
要解决该问题,您需要像这样指定
JsonSerializerOptions
PropertyNamingPolicy
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPoicy =
JsonNamingPolicy.SnakeCaseLower;
})