2017-01-03 9 views
1

Данные, которые я пытаюсь Deserialize это exacly как этот JSON в этом посте>десериализации JSON контейнер массив

Deserialize JSON Facebook feed using Gson, только с большим количеством объектов, внутри контейнера .. и я не использую «Gson»

Я думаю, что некоторые объекты даже имеют свои собственные контейнеры вложенными где-то, но это не является проблемой в настоящее время основной проблемой является то, что у меня возникли проблемы с десериализации в следующий класс ..

public class Rootobject 
{ 
    public int found { get; set; } 
    public Post[] posts { get; set; } 
    public Meta meta { get; set; } 
} 

I понять, что способ использования json из API выложили, это какой-то массив, в документах Json.net, они называют это DataSet. Я использую Json.Net

Моя последняя попытка десериализации - это;

List<Rootobject> data = JsonConvert.DeserializeObject<List<Rootobject>>(stringData); 

Но все же данные являются нулевыми, и я получаю;

Дополнительная информация:

Не может десериализации текущего объекта JSON (например, { "имя": "значение"}) в тип «System.Collections.Generic.List`1 [WebApplication17.Models. Rootobject] ' , потому что тип требует массива JSON (например, [1,2,3]) для десериализации правильно.

Возможно, LINQ to JSON - это способ не уверен, пока еще .. какие-либо предложения?

ответ

1

Первое, что JSON на почте не является допустимой строкой JSON, поэтому ее нельзя очертить. Во-вторых, я пытался исправить и исправить JSON, чтобы сделать его действительный JSON и, таким образом, ваш JSON выглядит

{ 
    "data": [ 
     { 
      "id": "105458566194298_411506355589516", 
      "message": "...", 
      "type": "status", 
      "created_time": "2012-11-25T17:26:41+0000", 
      "updated_time": "2012-11-25T17:26:41+0000", 
      "comments": { 
       "count": 0 
      } 
     }, 
     { 
      "id": "105458566194298_411506355589516", 
      "message": "...", 
      "type": "status", 
      "created_time": "2012-11-25T17:26:41+0000", 
      "updated_time": "2012-11-25T17:26:41+0000", 
      "comments": { 
       "count": 0 
      } 
     } 
    ] 
} 

Так структура классов будет что-то вроде этого

public class Comments 
{ 
    public int count { get; set; } 
} 
public class Datum 
{ 
    public string id { get; set; } 
    public string message { get; set; } 
    public string type { get; set; } 
    public DateTime created_time { get; set; } 
    public DateTime updated_time { get; set; } 
    public Comments comments { get; set; } 
} 
public class MyData 
{ 
    public List<Datum> data { get; set; } 
} 

, а затем Desearlize это нормально, как вы делали

MyData data = JsonConvert.DeserializeObject<MyData>(stringData); 
+0

Делает смысл .. что вы сделали, изменив анти-шаблон Json. Мой код больше похож на это, разница «найдена». { "найдено": 12, "сообщения": [ {}, {} ] } общественного класса Rootobject { общественного ИНТ найдено {получить; задавать; } public Post [] posts {get; задавать; } public List данные {get; задавать; } public Meta meta {get; задавать; } } Данные Rootobject = JsonConvert.DeserializeObject (stringData); Я не могу изменить Json так же, как из общедоступного API Wordpress ... В любом случае, я принял ваш совет, и я уверен, что он сделал эту работу так красиво. –

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