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

C#反序列化API返回的嵌套JSON数组报错,求问题排查

反序列化嵌套JSON的错误分析与修复方案

先看你拿到的JSON数据:

{ 
    "rootEntity": "function", 
    "count": 92516, 
    "header": ["eventNumber", "startDate", "eventType"], 
    "results": [ 
        ["40262-1", "Tuesday, December 12, 2017", "Corporate"], 
        ["14361-1", "Monday, October 23, 2017", "School"], 
        ["5014-1", "Friday, October 13, 2017", "Birthday"] 
    ] 
}

瞅了瞅你的代码,问题主要出在中间那串多余的字符串转换操作上,咱们一个个捋:

错误点分析

  • 多余的字符串拼接:String.Join("\\", jarr) 完全是画蛇添足,这会把原本格式正常的JArray转换成混乱的字符串,后续反序列化肯定失败。JArray本身就能直接序列化为标准JSON,或者直接映射到实体类的集合属性,根本不需要这么折腾。
  • 手动关闭流:reader.Close() 属于多此一举,你已经用了using块,它会自动帮你释放StreamReader资源(包括关闭流),手动调用反而可能引发不必要的问题。
  • 错误的字符串修剪:jsonString = jsonString.Trim('"'); 是基于前面错误的字符串操作的,结果只会让JSON格式更离谱,反序列化自然报错。

修复后的代码

首先得确保你的WebResp实体类和JSON结构对应正确:

public class WebResp
{
    public string rootEntity { get; set; }
    public int count { get; set; }
    public List<string> header { get; set; }
    public List<List<string>> results { get; set; }
}

然后直接反序列化整个JSON响应,跳过那些多余的中间步骤:

using (StreamReader reader = new StreamReader(responseStream))
{
    string jsonContent = reader.ReadToEnd();
    var resp = JsonConvert.DeserializeObject<WebResp>(jsonContent);
    jsonResponse = resp.results.ToArray();
}

要是你只想单独处理results部分,也可以用JObject提取后直接反序列化:

using (StreamReader reader = new StreamReader(responseStream))
{
    JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
    JArray jarr = (JArray)o["results"];
    var results = jarr.ToObject<List<List<string>>>();
    jsonResponse = results.ToArray();
}

这样操作完全贴合JSON的结构,就不会再出现反序列化错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:13