使用Newtonsoft.JSON反序列化JSON数组失败问题求助
解决Newtonsoft.JSON反序列化数组到单个对象的错误
这个错误的原因很明确:你的JSON数据是数组结构(被[]包裹,哪怕只有一个元素),但你却试图把它反序列化为单个Country对象——Newtonsoft.Json没办法把一个数组直接转换成单个对象,所以抛出了类型不匹配的异常。
这里有两种简单的解决方法:
方法一:反序列化为集合/数组类型
直接把目标类型改成List<Country>或者Country[],和JSON的数组结构对应上:
// 方法1:反序列化为List<Country> var countryList = JsonConvert.DeserializeObject<List<Country>>(content); // 如果只需要第一个元素,可以用FirstOrDefault()获取 var targetCountry = countryList?.FirstOrDefault(); // 方法2:反序列化为Country数组 var countryArray = JsonConvert.DeserializeObject<Country[]>(content); var targetCountryFromArray = countryArray?.FirstOrDefault();
这样序列化器就能正确识别JSON的数组结构,把里面的元素逐个转换成Country对象。
方法二:先解析为JArray再提取单个对象
如果你确定这个JSON数组永远只会有一个元素,也可以先把JSON解析成JArray,再把第一个元素转换成Country对象:
using Newtonsoft.Json.Linq; var jArray = JArray.Parse(content); var targetCountry = jArray.First.ToObject<Country>();
另外要确认你的Country类属性和JSON字段名称完全匹配——你现在的类定义是没问题的,属性名id、name、link、iso和JSON里的字段一一对应,不需要额外添加JsonProperty特性。
内容的提问来源于stack exchange,提问作者utop
相关产品推荐
相关产品推荐

