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

C#中JObject.Parse报错:JsonReaderException异常问题排查

解决Newtonsoft.Json.JsonReaderException:JSON数组被当作对象解析的问题

兄弟,这个问题我太熟了!你碰到的JsonReaderException本质就是JSON结构不匹配——你用JObject.Parse()去解析一个JSON数组,但JObject专门用来处理JSON对象,自然就报错了。

错误原因拆解

错误信息里的Current JsonReader item is not an object: StartArray已经说得很直白:你传入的JSON字符串开头是[(数组的起始符号),但JObject.Parse()只认开头是{的JSON对象,两者不匹配就抛出了异常。

具体解决步骤

  1. 先确认返回的JSON结构
    先把verigetir(veri.getir(), "ca...")返回的字符串打印出来看看,应该是类似这样的数组格式:

    [{"id":1,"name":"test"},{"id":2,"name":"demo"}]

  2. 改用JArray.Parse()解析数组
    把你的代码改成用JArray.Parse()来处理数组结构:

    JArray dataArray = JArray.Parse(verigetir(veri.getir(), "ca..."));
    
  3. 遍历数组处理单个对象
    如果需要操作数组里的每个对象,可以遍历这个JArray:

    foreach (JObject item in dataArray)
    {
        // 示例:获取对象里的属性值
        string itemName = item["name"]?.ToString();
        int itemId = (int)item["id"];
        // 这里写你的业务逻辑
    }
    
  4. 兼容不确定结构的场景(可选)
    如果有时候你不确定接口返回的是对象还是数组,可以先解析成JToken再判断类型:

    JToken responseToken = JToken.Parse(verigetir(veri.getir(), "ca..."));
    if (responseToken.Type == JTokenType.Object)
    {
        JObject dataObject = (JObject)responseToken;
        // 处理JSON对象的逻辑
    }
    else if (responseToken.Type == JTokenType.Array)
    {
        JArray dataArray = (JArray)responseToken;
        // 处理JSON数组的逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:04:23