如何在C#中正确反序列化JSON对象?解决数组反序列化错误
解决JSON反序列化报错:
Type System.String' is not supported for deserialization of an array 嘿,这个问题一眼就能看出症结所在!你遇到的反序列化错误,完全是因为模型字段类型和JSON返回的结构不匹配导致的。
问题根源分析
你调用的接口返回的JSON里,callingCodes字段是一个字符串数组(比如某个国家的返回会是"callingCodes": ["+86"],有些国家可能有多个区号),但你在CountriesList模型里把它定义成了string类型——反序列化器自然没法把数组转换成单个字符串,于是就抛出了这个错误。
修复方案
只需要把模型里的callingCodes字段类型改成数组或者列表即可,两种方式都可以:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace ApplicationPortal.Models { public class CountriesList { public string name { get; set; } // 改成List<string>,适合后续需要操作元素的场景 public List<string> callingCodes { get; set; } // 或者改成字符串数组,更轻量化 // public string[] callingCodes { get; set; } } }
额外小建议
如果之后再遇到类似的JSON结构匹配问题,你可以:
- 把API返回的JSON内容复制到在线JSON格式化工具里查看字段结构
- 用Visual Studio的「编辑 → 选择性粘贴 → 将JSON粘贴为类」功能,自动生成完全匹配的模型类,能省不少手动写模型的时间
你的GetCountries方法逻辑是没问题的,修改完模型之后,反序列化就能正常工作了。
内容的提问来源于stack exchange,提问作者Zidane
相关产品推荐
相关产品推荐

