2017-01-03 4 views
1

Die Daten, die ich zu Deserialize versuche ist exacly wie diese json in diesem Beitrag>Deserialize ein json Container Array

Deserialize JSON Facebook feed using Gson, Nur mit mehr Objekte im Inneren des Behälters, .. und ich bin nicht mit „Gson“

ich denke, einige der Objekte, sogar ihre eigenen Container irgendwo verschachtelt haben, aber das ist nicht das Problem derzeit, ist das Hauptproblem, dass ich Probleme habe Deserialisieren in der folgenden Klasse ..

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

I verstehe, dass die json von der API ist Layout, es eine Art Array, in den Json.net-Dokumenten, nennen sie es ein DataSet .. Ich benutze Json.Net

mein letzter Versuch zu deserialize ist;

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

Aber noch Daten sind null und ich bekomme;

Zusätzliche Informationen:

kann nicht die aktuelle JSON-Objekt deserialisieren (zB { "name": "Wert"}) in Typ ‚System.Collections.Generic.List`1 [WebApplication17.Models. Rootobject] ' , da der Typ ein JSON-Array benötigt (zB [1,2,3]), um korrekt zu deserialisieren.

vielleicht LINQ zu JSON ist der Weg zu gehen noch nicht sicher .. irgendwelche Vorschläge?

Antwort

1

Die erste Sache ist, dass der JSON am Post kein gültiger JSON-String ist, so dass er nicht deseliert werden kann. Zweitens habe ich versucht, die JSON zu korrigieren und zu korrigieren, um eine gültige JSON zu machen und damit Ihre JSON sieht aus wie

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

So ist die Klassen-Struktur so etwas wie diese

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

sein würde und es dann normalerweise Desearlize wie Sie taten

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

Macht Sinn .. was Sie getan haben, indem Sie die Anti-Pattern-JSON zu ändern. Mein Code ist eher so, der Unterschied ist "gefunden". { "gefunden": 12, "Beiträge": [ {} {} ] } public class RootObject { Öffentlichkeit gefunden int {get; einstellen; } public Post [] Beiträge {get; einstellen; } öffentliche Liste Daten {erhalten; einstellen; } öffentliche Meta meta {erhalten; einstellen; } } Rootobject-Daten = JsonConvert.DeserializeObject (stringData); Ich kann den JSON nicht ändern, wie es von der öffentlichen API von Wordpress ist ... In jedem Fall habe ich Ihren Rat genommen, und ich bin ziemlich sicher, dass es den Job so netten einen Kumpel getan hat. –