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
相关产品推荐
相关产品推荐

