2017-01-03 3 views
1

Les données que je suis en train de Désérialise exacly comme celui-ci JSON dans ce post>Désérialise un tableau contenant JSON

Deserialize JSON Facebook feed using Gson, seulement avec plus d'objets, à l'intérieur du conteneur .. et je ne suis pas en utilisant « Gson »

Je pense que certains des objets ont même leurs propres conteneurs imbriqués quelque part, mais ce n'est pas la question à l'heure actuelle, la question principale est que je rencontre des problèmes désérialisation dans la classe suivante ..

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

I comprendre que la façon dont le json de l'API est mis en place, il est une sorte de tableau, dans les docs Json.net, ils appellent un DataSet .. J'utilise Json.Net

ma tentative la plus récente de désérialiser est;

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

Mais les données fixes sont nulles et j'obtiens;

Informations complémentaires:

ne peut désérialiser l'objet JSON en cours (par exemple { "name": "valeur"}) dans le type « System.Collections.Generic.List`1 [WebApplication17.Models. Rootobject] ' car le type nécessite un tableau JSON (par exemple [1,2,3]) pour désérialiser correctement .

Peut-être que LINQ to JSON est le chemin à parcourir, pas encore sûr ... des suggestions?

Répondre

1

La première chose est le JSON à la poste n'est pas une chaîne JSON valide donc il ne peut pas être désearlized. En second lieu, j'ai essayé de rectifier et corriger le JSON pour en faire un JSON valide et donc votre JSON ressemble

{ 
    "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 
      } 
     } 
    ] 
} 

Ainsi, la structure des classes serait quelque chose comme ça

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; } 
} 

et Desearlize alors normalement comme vous faisiez

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

Cela a du sens ... ce que vous avez fait en modifiant le Json anti-modèle. Mon code ressemble plus à ceci, la différence étant "trouvé". { "trouvé": 12, "messages": [ {}, {} ] } public class RootObject { public int trouvé {get; ensemble; } public Post [] messages {get; ensemble; } public Liste data {get; ensemble; } public Meta meta {get; ensemble; } } Données de l'objet racine = JsonConvert.DeserializeObject (stringData); Je ne peux pas modifier le Json comme il est de Wordpress API public ... En tout cas, j'ai suivi votre conseil et je suis à peu près sûr qu'il a fait le travail si gentil. –