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

JSON.NET中JToken的键是否区分大小写?自定义反序列化遇问题

解决JToken键值区分大小写导致取值为null的问题

你遇到的这个问题确实是JSON.NET中JToken默认对键名区分大小写导致的——哪怕JSON里的字段只是大小写和你代码里的不一样(比如JSON里是"Version"或者"VERSION"),用token["version"]去取值都会返回null。下面给你两种实用的解决办法:

方法一:单个键不区分大小写访问

使用SelectToken方法并指定忽略大小写的比较规则,这样就能精准定位到目标字段,不管它的大小写是什么样的:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
{ 
    JToken token = JToken.Load(reader); 
    // 使用SelectToken并指定忽略大小写
    JToken version = token.SelectToken("version", StringComparison.OrdinalIgnoreCase); 
    string ver = version.ToObject<string>(); 
    return new MyVersion(ver); 
}

方法二:全局设置JToken加载时忽略大小写

如果你的场景里需要对整个JToken的所有键都忽略大小写,可以在加载JToken的时候传入JsonLoadSettings配置:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
{ 
    // 配置加载时忽略键名大小写
    JsonLoadSettings loadSettings = new JsonLoadSettings
    {
        PropertyNameCaseInsensitive = true
    };
    JToken token = JToken.Load(reader, loadSettings); 
    JToken version = token["version"]; // 现在这里会自动忽略大小写匹配
    string ver = version.ToObject<string>(); 
    return new MyVersion(ver); 
}

两种方法都能解决你的问题,你可以根据实际场景选择:如果只是个别键需要忽略大小写,用方法一更灵活;如果整个JSON结构都需要不区分大小写处理,方法二更省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:07