WinForms中Newtonsoft.Json反序列化JSON数组到Dictionary异常问题问询
问题原因
- 待反序列化的JSON根结构是数组(用
[]包裹),但代码里指定的反序列化目标类型是Dictionary<string, Diskop>,字典要求JSON根是对象(用{}包裹的键值对结构),类型不匹配直接触发抛出异常。 Diskop类的继承逻辑多余:你提供的JSON里每个元素只有isim、no、puan三个普通属性,没有动态键值对的嵌套字典结构,继承Dictionary<string, Diskop>会导致反序列化逻辑异常。
解决方案
步骤1:修正Diskop类定义
移除不必要的Dictionary继承,改为普通POCO类:
internal class Diskop { public string isim { get; set; } public int no { get; set; } public int puan { get; set; } }
步骤2:修正反序列化目标类型
把反序列化目标从Dictionary<string, Diskop>改为List<Diskop>,匹配JSON的数组结构:
List<Diskop> data = JsonConvert.DeserializeObject<List<Diskop>>(res.Body.ToString());
可选:业务需要字典时手动转换
如果后续逻辑需要使用字典结构,可以在反序列化为列表后手动转换:
// 示例:以no字段为键构造字典 Dictionary<int, Diskop> dataDict = data.ToDictionary(x => x.no, x => x); // 若以isim为键需要提前确认字段无重复值,否则会触发重复键异常
内容的提问来源于stack exchange,提问作者Menque
相关产品推荐
相关产品推荐

