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

C#中Json.NET解析JSON遇[字符报错,寻求原因及解决办法

解决Json.NET抛出JsonReaderException:Unexpected character encountered while parsing value: [

这种情况我之前也碰到过好几次——明明JSON在其他平台能用、在线校验也合法,偏偏在C#里用Json.NET就报错。核心原因基本都是解析逻辑和JSON的实际结构不匹配,或者字符串本身有隐藏问题,给你几个具体的排查和解决方向:

  • 最常见:把数组当成单个对象解析了
    如果你的JSON根节点是数组(开头就是[),但你却用了针对单个对象的反序列化方法,比如:

    // 错误示例:JSON是数组,但反序列化成单个类
    var result = JsonConvert.DeserializeObject<YourSingleModel>(jsonString);
    

    Json.NET会期望JSON开头是{(对象的起始符),结果看到[就直接抛出异常。
    解决方法很简单,改成解析数组类型:

    // 正确:反序列化成集合
    var result = JsonConvert.DeserializeObject<List<YourSingleModel>>(jsonString);
    // 或者先解析成JArray再处理
    var jArray = JArray.Parse(jsonString);
    
  • 检查JSON字符串是否有隐藏的特殊字符
    有时候从接口、文件或者其他渠道获取的JSON,会带有BOM(字节顺序标记)、零宽空格这类看不见的特殊字符,在线校验工具会自动忽略,但Json.NET对这些字符很敏感。
    你可以先清理字符串再尝试解析:

    jsonString = jsonString.Trim('\uFEFF', '\u200B'); // 去掉BOM和零宽字符
    var result = JsonConvert.DeserializeObject(...);
    
  • 确认Json.NET版本是否过时
    较老版本的Json.NET可能对某些合法的JSON结构支持不完善,比如复杂嵌套数组的场景,虽然在线校验通过,但旧库处理时会报错。
    解决方法:打开NuGet包管理器,搜索Newtonsoft.Json,把版本更新到最新稳定版。

  • 排查是否有额外内容混入JSON字符串
    有时候你可能在解析前不小心给JSON拼接了其他内容(比如日志前缀、接口响应的状态码文本),导致实际传给Json.NET的字符串开头并不是合法的JSON起始字符。
    解决方法:先把要解析的字符串完整打印出来(比如用Console.WriteLine(jsonString)),仔细检查开头和结尾是否有多余的字符。

内容的提问来源于stack exchange,提问作者user3459555

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:43:57