【发布时间】:2011-08-23 00:25:15
【问题描述】:
我正在编写一个应用程序,该应用程序在 Visual C# 4.0 中向/从后端发布和获取 JSON。
显然,序列化/反序列化 JSON 的最简单方法是 System.Web.Script.Serialization.JavaScriptSerializer,但我遇到了一个奇怪的错误,它抛出 ArgumentNullException,声称该类型为 null。
当下面的 JSON 被反序列化后,就可以正常工作了:
{"results":[
{"Name":"Western Bulldogs",
"updatedAt":"2011-08-22T09:09:09.673Z",
"Nickname":"Bulldogs",
"RemoteId":44,
"Abbreviation":"WB",
"createdAt":"2011-08-22T09:09:09.673Z",
"objectId":"2iSK8FDTA6"}
]}
但是,当反序列化第二个(使用嵌套字典)时,它会失败并出现 type is null 错误。
{"results":[
{"EndDate":{"iso":"2011-09-06T00:00:00.000Z","__type":"Date"},
"Name":"Round 24",
"updatedAt":"2011-08-22T08:33:54.119Z",
"RemoteId":800,"createdAt":"2011-08-22T08:33:54.119Z",
"Season":{"className":"Season","__type":"Pointer","objectId":"WnsdqIlrd6"},
"Order":24,
"StartDate":{"iso":"2011-08-30T00:00:00.000Z","__type":"Date"},
"objectId":"bLdBfhagi9"}
]}
作为参考,我使用以下方法对两个查询进行反序列化:
JavaScriptSerializer jsSerialise = new JavaScriptSerializer();
ObjectIdContainerList contList = jsSerialise.Deserialize<ObjectIdContainerList>(responseString);
其中 ObjectIdContainerList 如下(注意——它没有实现原始 JSON 对象的所有属性,因为我只对获取 objectId 属性感兴趣):
[Serializable]
public class ObjectIdContainerList
{
public ObjectIdContainer[] results { get; set; }
}
[Serializable]
public class ObjectIdContainer
{
public String objectId { get; set; }
}
第一个查询反序列化没有问题,代码和对象完全相同。
有什么建议吗?我最好还是去 JSON.NET 吗?
【问题讨论】:
-
先贴出你的 ObjectIdContainerList ,如果可能的话,不要遗漏 json 数据,这样我们就可以看到到底发生了什么。
标签: c# json javascriptserializer argumentnullexception