如何在所有序列化为 JSON 以及模型绑定时全局强制执行小写蛇形大小写

问题描述 投票:0回答:1

我有多个模型,最终我编写了 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() 将我的模型序列化到前端时,名称会自动调整为我的属性名称曾经的样子(小写蛇)。然而,它们仍然采用驼峰式命名,我不知道为什么。我还需要做些什么吗?

c# asp.net-core system.text.json
1个回答
0
投票

问题在于您没有将所需的命名策略配置为所有选项的属性命名策略。相反,您当前正在注册一个枚举到字符串转换器,该转换器仅用于枚举,并指定该转换器应如何将枚举成员名称转换为字符串值 json 元素的命名策略。

要解决该问题,您需要像这样指定

JsonSerializerOptions
PropertyNamingPolicy

.AddJsonOptions(options =>
{
   options.JsonSerializerOptions.PropertyNamingPoicy = 
       JsonNamingPolicy.SnakeCaseLower; 
})
© www.soinside.com 2019 - 2024. All rights reserved.