Как мне разобрать эту структуру JSON? - PullRequest
0 голосов
/ 20 декабря 2011

Как мне разобрать этот 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);

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

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

System.InvalidCastException: InvalidCastException at
System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract (DataContract
контракт, значение объекта, XmlObjectSerializerReadConsonsontime
timetime4) System5.Serialization.значение, XmlObjectSerializerReadContextComplexJson
context) в System.Runtime.Serializati

Как проанализировать этот JSON?

MatteЭто то, что для обычного 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, по-видимому, у меня есть:

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

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

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

1 Ответ

0 голосов
/ 20 декабря 2011

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

Данные JSON представляют собой массив массив чего-либо.Итак, ваш корневой тип данных должен быть примерно таким: Categor[][].

Обновление:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...