You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Newtonsoft.Json反序列化时遇[字符识别异常求助

问题分析与解决办法

嘿,我来帮你搞定这个报错~其实问题根源非常明确:你的C#类和JSON数据的类型不匹配,导致Newtonsoft.Json解析时直接懵圈了。

为什么会抛出这个异常?

你仔细对比下就能发现:

  • 在Project类里,Details被定义成了string类型
  • 但对应的JSON里,"Details"是一个对象数组(用[ ]包裹着内部的对象)

Newtonsoft.Json在解析到Details字段时,预期要读取一个字符串(正常应该以"开头),结果突然看到了数组的起始符号[,完全不符合它的预期,自然就抛出了JsonReaderException,告诉你遇到了意外的字符。

怎么修复?

我们需要让C#类的结构完全匹配JSON的结构,分三步来:

  1. 定义数组内部对象的类
    JSON里的Details数组每个元素都是一个包含detail1和detail2的对象,所以先写一个对应的类:
public class DetailItem
{
    [JsonProperty("detail1")]
    public string Detail1 { get; set; }
    
    [JsonProperty("detail2")]
    public string Detail2 { get; set; }
}
  1. 修改Project类的Details类型
    把原来的string改成数组或者列表类型,推荐用List<DetailItem>(更灵活):
public class Project 
{ 
    [JsonProperty("team")] 
    public string Team { get; set; } 
    
    [JsonProperty("details")] 
    public List<DetailItem> Details { get; set; }
}
  1. 修正反序列化的笔误
    你代码里写的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:17:01