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

C#中JSON反序列化为对象失败问题排查

问题:C#控制台应用中API响应反序列化结果为null,类定义是否存在问题?

我调用API得到如下JSON响应:

{
  "d": {
    "results": [
      {
        "__metadata": {
          "id": "123",
          "uri": "456",
          "type": "789"
        },
        "PERNR": "1",
        "USRID": "2"
      },
      {
        "__metadata": {
          "id": "159",
          "uri": "951",
          "type": "753"
        },
        "PERNR": "4",
        "USRID": "6"
      }
    ]
  }
}

使用以下代码进行反序列化:

public class d
{
    public results results { get; set; }
}

public class results
{
    public string PERNR { get; set; }
    public string USRID { get; set; }
    public __metadata __metadata { get; set; }
}

public class __metadata
{
    public string id { get; set;}
    public string uri { get; set; }
    public string type { get; set; }
}
var serilizer = new JavaScriptSerializer();
d output = serilizer.Deserialize<d>(response.Content);

但反序列化结果为null,请问我的类定义是否存在问题?


回答

你的类定义存在类型不匹配的问题,这是导致反序列化结果为null的核心原因:

  • JSON响应里的results是一个数组(用[]包裹),包含多个对象;但你在d类中把results定义成了单个results对象,而非集合类型,序列化器无法将数组映射到单个对象,最终导致反序列化失败。

修正后的类定义如下:

public class d
{
    // 将单个results对象改为List<results>集合
    public List<results> results { get; set; }
}

public class results
{
    public string PERNR { get; set; }
    public string USRID { get; set; }
    public __metadata __metadata { get; set; }
}

public class __metadata
{
    public string id { get; set;}
    public string uri { get; set; }
    public string type { get; set; }
}

修正后再执行原反序列化代码,就能正确解析出数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:21:02