JsonConvert.DeserializeObject反序列化JSON为List时类型不匹配报错
错误原因
传入的JSON字符串根节点是{}包裹的单个对象,结构与单个birdDataSolutionVM实体完全对应;但反序列化时指定的目标类型为List<birdDataSolutionVM>,该集合类型仅支持反序列化[]包裹的JSON数组结构,类型与JSON结构不匹配。解析器读取到根节点第一个属性metalRingID时就检测到结构冲突,直接抛出本次异常。
解决方法
调整反序列化的目标泛型类型,和JSON实际根结构保持一致即可:
var birdRecords = JsonConvert.DeserializeObject<birdDataSolutionVM>(data);
如果下游业务逻辑强制要求返回List<birdDataSolutionVM>类型,无需修改JSON或给实体添加特性,将反序列化得到的单个对象包装为列表即可:
var singleData = JsonConvert.DeserializeObject<birdDataSolutionVM>(data); var birdRecordList = new List<birdDataSolutionVM> { singleData };
额外注意:代码中
birdDataSolutionVM引用的birdRecordVM类需要与birdData数组内的字段结构匹配,否则嵌套属性反序列化会失败,参考实现如下:public class birdRecordVM { [JsonProperty("longitude")] public double longitude { get; set; } [JsonProperty("latitude")] public double latitude { get; set; } [JsonProperty("gridRef")] public string gridRef { get; set; } [JsonProperty("date")] public DateTime date { get; set; } }
内容的提问来源于stack exchange,提问作者BUIBBE
相关产品推荐
相关产品推荐

