Я пишу приложение, которое отправляет и получает JSON в / из бэкэнда в Visual C # 4.0.
Очевидно, что самый простой способ сериализации / десериализации 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"}
]}
Однако,при десериализации второго (с вложенным словарем) происходит сбой с типом null error.
{"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?