如何使用Newtonsoft.Json反序列化结构变更后的JSON数据
问题原因
新返回的JSON结构是外层为键值对的对象,而非包含Persons字段的数组结构,和你定义的PersonResult类结构完全不匹配,因此反序列化失败。同时服务端将原小写的dob字段改为了大写DOB,也会导致原有属性映射失败。
解决方案
第一步:调整Person类的属性映射
删除Name属性的JsonProperty特性(值将来自外层字典的键),修改DOB属性的JsonProperty匹配新的大写字段名:
public class Person { public string Name {get; set;} [JsonProperty("age")] public decimal Age {get; set;} [JsonProperty("height")] public decimal Height {get; set;} [JsonProperty("weight")] public decimal Weight {get; set;} [JsonProperty("DOB")] public DateTime DOB {get; set;} }
第二步:分两步完成反序列化
先将JSON反序列化为Dictionary<string, Person>类型,再遍历字典将键值赋值给对应Person对象的Name属性,最终转换为数组:
// 反序列化为字典 var personDict = JsonConvert.DeserializeObject<Dictionary<string, Person>>(jsonString); // 填充Name属性并转为数组 Person[] persons = personDict.Select(kv => { kv.Value.Name = kv.Key; return kv.Value; }).ToArray();
如果不需要保留原有数组调用方式,也可以直接使用字典类型处理业务逻辑,省略转换步骤。
内容的提问来源于stack exchange,提问作者Questions
相关产品推荐
相关产品推荐

