Newtonsoft.Json反序列化异常:JSON对象转List<T>失败问题排查
问题分析与解决方案
你的JSON数据格式本身没问题,报错的核心原因是:你试图将一个JSON对象反序列化为List<T>类型,但List<T>要求JSON的根结构是数组,而你的JSON根是包含userHBList键的对象。
正确的处理方法
方法1:从JObject中提取数组直接转换
既然已经解析成了JObject,可以直接定位到userHBList对应的数组节点,再转换为List<UserHBList>:
JObject json = JObject.Parse(stringJson); List<UserHBList> userHBLists = json["userHBList"].ToObject<List<UserHBList>>();
方法2:定义根对象类,直接反序列化整个JSON
如果不想手动解析JObject,可以创建一个匹配整个JSON结构的根类,直接反序列化原始字符串:
// 定义匹配JSON结构的根类 public class UserHBResponse { public List<UserHBList> userHBList { get; set; } } // 直接反序列化原始JSON字符串 var response = JsonConvert.DeserializeObject<UserHBResponse>(stringJson); List<UserHBList> userHBLists = response.userHBList;
方法3:提取JArray后转换(更显式的写法)
JObject json = JObject.Parse(stringJson); JArray userHBArray = (JArray)json["userHBList"]; List<UserHBList> userHBLists = userHBArray.ToObject<List<UserHBList>>();
原代码报错原因
你之前的代码JsonConvert.DeserializeObject<List<UserHBList>>(json.ToString())是把整个JObject(即外层的JSON对象)转成字符串后去反序列化为List,而JSON对象的格式是{...},List需要的是[...]格式的数组,所以序列化库会抛出类型不匹配的异常。
内容的提问来源于stack exchange,提问作者Matthew Pans
相关产品推荐
相关产品推荐

