如何全局实现JSON序列化与模型绑定的小写蛇形命名?
问题原因与解决方案
你当前的代码只配置了枚举类型的序列化规则,并没有设置普通类属性的全局命名策略,所以移除JsonPropertyName后,属性还是默认的驼峰命名。
要实现普通属性自动转为小写蛇形命名,需要在JsonSerializerOptions中额外设置PropertyNamingPolicy,修改后的完整代码如下:
builder.Services.AddControllers() .AddJsonOptions(options => { // 全局设置:普通属性转为小写蛇形命名 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower; // 枚举类型序列化为小写蛇形字符串 options.JsonSerializerOptions.Converters.Add( new JsonStringEnumConverter(JsonNamingPolicy.SnakeCaseLower, false)); });
说明:
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower:这行是核心配置,它会让所有未被JsonPropertyName标记的类属性,在序列化时自动转换为小写蛇形命名(比如StateId→state_id,EntityName→entity_name)。- 保留的
JsonStringEnumConverter负责把枚举值也转为小写蛇形字符串(比如枚举值OrderState.WaitingForPayment会序列化为waiting_for_payment)。
如果后续有个别属性需要脱离全局规则,直接给该属性加上JsonPropertyName即可,它会覆盖全局配置。
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

