You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中System.Text.Json如何支持区分大小写的属性名?

解决System.Text.Json中区分大小写属性名的冲突问题

问题根源

出现该冲突是因为你同时设置了全局PropertyNamingPolicy = JsonNamingPolicy.CamelCase,并通过JsonPropertyName指定了大小写不同的属性名。尽管JsonPropertyName优先级高于全局命名策略,但系统内部对JSON属性名的唯一性检查默认忽略大小写,再加上全局策略的干扰,导致两个大小写不同的属性被判定为重复。

解决方案

方案1:移除全局命名策略(推荐)

若仅需这两个属性区分大小写,其他属性无需统一命名规则,直接移除全局PropertyNamingPolicy配置即可:

修改后的JsonSerializerOptions:

public static JsonSerializerOptions Default => new()
{
    PropertyNameCaseInsensitive = false,
    // 移除PropertyNamingPolicy = JsonNamingPolicy.CamelCase
    WriteIndented = false,
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};

此时,通过JsonPropertyName指定的"statusCode"和"StatusCode"会被系统正确识别为不同属性,PropertyNameCaseInsensitive = false也会确保反序列化时严格区分大小写。

方案2:保留全局策略(适用于其他属性需camelCase的场景)

如果其他属性需要统一使用camelCase命名,可保留全局策略,但需确保.NET版本为.NET 6及以上(该版本对JsonPropertyName优先级的处理更稳定):

属性定义保持不变:

[JsonPropertyName("statusCode")]
public string? StatusCode { get; set; }

[JsonPropertyName("StatusCode")]
public string? AbcApiStatusCode { get; set; }

JsonSerializerOptions配置:

public static JsonSerializerOptions Default => new()
{
    PropertyNameCaseInsensitive = false,
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    WriteIndented = false,
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};

内容的提问来源于stack exchange,提问作者Wasim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:37:34