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

使用Newtonsoft.Json反序列化可变字段JSON时遇值为空问题

解决Newtonsoft.Json反序列化动态键值对为空的问题

问题原因

你的类结构中,Fix类的Values属性期望JSON数据里存在一个名为Values的嵌套对象,但实际返回的JSON中,fixes数组内的对象是直接包含fix1、fix2等动态键值对,没有Values这个层级,导致反序列化时无法匹配到Values属性,最终它为空。

解决方案

方法一:使用[JsonExtensionData]特性捕获动态键

修改Fix类,给IDictionary属性添加[JsonExtensionData]特性,Newtonsoft.Json会自动将对象中所有未匹配到其他属性的键值对存入该字典:

public class Update
{
    public class Fix
    {
        [JsonExtensionData]
        public IDictionary<string, string> Values { get; set; }
    }
    
    public class Root
    {
        public string version { get; set; }
        public List<Fix> fixes { get; set; }
    }
}

修改后,原反序列化代码无需改动,Values属性就能正确加载fix1、fix2等所有动态键值对,遍历逻辑可以正常获取值。

方法二:简化类结构(推荐)

如果Fix类没有其他额外属性,可以直接去掉该类,将根类中的fixes定义为List<IDictionary<string, string>>,结构更简洁:

public class UpdateRoot
{
    public string version { get; set; }
    public List<IDictionary<string, string>> fixes { get; set; }
}

对应的反序列化代码调整为:

var root = JsonConvert.DeserializeObject<UpdateRoot>(strContent);
        
var fixes = root.fixes[0];

foreach (var fix in fixes)
{
    string test = fix.Value.ToString();
}

验证

两种方法都能正确将JSON中的动态键值对加载到字典中,遍历过程可以正常获取每个fix对应的字符串值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:16:04