使用Newtonsoft.Json反序列化时遇[字符识别异常求助
问题分析与解决办法
嘿,我来帮你搞定这个报错~其实问题根源非常明确:你的C#类和JSON数据的类型不匹配,导致Newtonsoft.Json解析时直接懵圈了。
为什么会抛出这个异常?
你仔细对比下就能发现:
- 在
Project类里,Details被定义成了string类型 - 但对应的JSON里,
"Details"是一个对象数组(用[ ]包裹着内部的对象)
Newtonsoft.Json在解析到Details字段时,预期要读取一个字符串(正常应该以"开头),结果突然看到了数组的起始符号[,完全不符合它的预期,自然就抛出了JsonReaderException,告诉你遇到了意外的字符。
怎么修复?
我们需要让C#类的结构完全匹配JSON的结构,分三步来:
- 定义数组内部对象的类
JSON里的Details数组每个元素都是一个包含detail1和detail2的对象,所以先写一个对应的类:
public class DetailItem { [JsonProperty("detail1")] public string Detail1 { get; set; } [JsonProperty("detail2")] public string Detail2 { get; set; } }
- 修改
Project类的Details类型
把原来的string改成数组或者列表类型,推荐用List<DetailItem>(更灵活):
public class Project { [JsonProperty("team")] public string Team { get; set; } [JsonProperty("details")] public List<DetailItem> Details { get; set; } }
- 修正反序列化的笔误
你代码里写的JsonConvert.DeserializeObject<Projets>(json_string);里的Projets是拼写错误,应该改成Project,不然会先触发编译报错哦~
完整的修正后代码
// 先定义数组元素对应的类 public class DetailItem { [JsonProperty("detail1")] public string Detail1 { get; set; } [JsonProperty("detail2")] public string Detail2 { get; set; } } // 再定义Project主类 public class Project { [JsonProperty("team")] public string Team { get; set; } [JsonProperty("details")] public List<DetailItem> Details { get; set; } } // 反序列化执行代码 Project project = new Project(); string json_string = File.ReadAllText(@"C:\file.json", Encoding.UTF8); project = JsonConvert.DeserializeObject<Project>(json_string);
这样修改后,Newtonsoft.Json就能正确识别JSON里的数组结构,顺利完成反序列化啦~
内容的提问来源于stack exchange,提问作者Karaelfte
相关产品推荐
相关产品推荐

