2011-12-20 2 views
0

Как разобрать этот JSON? Я не знаю, как определить эту структуру:Как разобрать эту структуру JSON?

[ 
    [{ 
     "timestamp": 1324374926 
    }], 
    [{ 
     "id": "9", 
     "neme": "qqq" 
    }, { 
     "id": "19", 
     "neme": "qqq" 

    }, { 
     "id": "29", 
     "neme": "qqq" 
    }] 
] 

JSON синтаксического анализа кода:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Categor[])); 
Categor[] result = (Categor[])serializer.ReadObject(responseStream); 

путем определения контрактов данных ...

Компилятор возвращается:

системы. InvalidCastException: InvalidCastException:
System.Runtime.Serialization.Json.DataCon tractJsonSerializer.ConvertObjectToDataContract (DataContract
контракта, стоимость объекта, XmlObjectSerializerReadContextComplexJson
контекст) на
System.Runtime.Serialization.Json.ObjectToDataContractConverter.ConvertICollectionToCollectionDataContract (DataContractJsonSerializer
сериализатора, CollectionDataContract контракта, объект deserializedValue,
контекст XmlObjectSerializerReadContextComplexJson) в
System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract (DataContract
контракт, значение объекта, XmlObjectSerializerReadContextComplexJson
контекст) на System.Runtime.Serializati

Как разобрать этот JSON?

Дело в том, что для нормального JSON Я создаю Fe:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Categor[])); 
Categor[] result = (Categor[])serializer.ReadObject(responseStream); 
[ 

{ 
    "category": "A", 
    "subcategories": [ 
     { 
      "id": "QW", 
      "name": "A", 
      "ranking": 100, 
      "isVisible": true 
     }, 
     { 
      "id": "QWN0d", 
      "name": "Pol", 
      "ranking": 101, 
      "isVisible": false 
     }, 

...

модель данных:

[DataContract] 
    public class Articlesubcat 
    { 
     [DataMember(Name = "id")] 
     public string id { get; set; } 
     [DataMember(Name = "name")] 
     public string name { get; set; } 
     [DataMember(Name = "ranking")] 
     public string ranking { get; set; } 
     [DataMember(Name = "isVisible")] 
     public string isVisible { get; set; } 

    } 

    [DataContract] 
    public class Categor 
    { 
      [DataMember(Name = "category")] 
     public string category { get; set; } 
      [DataMember(Name = "subcategories")] 
     public List<Articlesubcat> subcat { get; set; } 
    } 

Но в этом формате JSON Aparently у меня есть:

[ 
[ 
{ 
    "timestamp": 1324374926 
} 
], 
[ 
    { 
    "id": "9", 
    "neme": "qqq" 
    }, 
    { 
    "id": "19", 
    "neme": "qqq" 

    }, 
    { 
    "id": "29", 
    "neme": "qqq" 
    } 
] 
] 

и как я вижу, я не знаю, как подготовить модель для этого объекта 2 (объекты массива), или я даже не знаю, что такое название этой структуры.

+0

Что такое '' Categor'? Пожалуйста, покажите код. – Yuck

+0

Вам также нужно будет показать свою модель данных. –

+0

Спасибо за дополнительную информацию. Я обновил свой ответ. – Codo

ответ

0

Даже если вы не указали нам объявление Categor, Categor[] не может быть правильным корневым типом данных вашего JSON.

Данные JSON: массивмассив что-то. Поэтому ваш корневой тип данных должен быть чем-то вроде Categor[][].

Update:

Спасибо за размещение декларацию Categor. Теперь ясно, что ваш образец JSON не является массивом из Categor экземпляров. Вместо этого это массив из двух элементов. Первый - это массив некоторых типов неизвестных объектов. Он содержит свойство, называемое timestamp. Поэтому он не может быть экземпляром Categor.Второй элемент представляет собой массив из Categor экземпляров (и, вероятно, часть, которую вы ожидаете).

С некоторой удачей вы можете разобрать JSON с корневым типом Categor[][], а затем просто использовать второй элемент самого верхнего массива. Если это не сработает, вам, вероятно, придется переключиться на альтернативную библиотеку JSON, так как DataContractJsonSerializer имеет некоторые ограничения с массивами смешанных типов.

Смежные вопросы