2012-03-25 17 views
7

Ich bin neu mit JSON.NET und ich versuche, eine JSON-Zeichenfolge zu einem einfachen .NET-Objekt deserialisieren. Hier ist ein Ausschnitt aus meinem Code:JSON.NET Deserialisierung

public void DeserializeFeed(string feed) 
{ 
    JsonSerializer ser = new JsonSerializer(); 
    Post deserializedPost = JsonConvert.DeserializeObject<Post>(feed); 

    if (deserializedPost == null) 
     MessageBox.Show("JSON ERROR !"); 
    else 
    { 
     MessageBox.Show(deserializedPost.titre); 
    } 
} 

Wenn ich

MessageBox.Show(deserializedPost.titre); 

ich diesen Fehler immer erhalten:

Value can not be null.

Hier ist meine Aufgabe, die ich mit der füllenden abgerufenes JSON-Element:

using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

namespace MeltyGeeks 
{ 
    public class Post 
    { 
     public String titre { get; set; } 
     public String aresum { get; set; } 

     // Constructor 
     public Post() 
     { 
     } 
    } 
} 

Und hier ist ein Ausschnitt aus meiner JSON-String:

{"root_tab":{"tab_actu_fil":{"data":[{"c_origine":"MyApp", 
"titre":"title of first article", 
"aresum":"this is my first Article 
"tab_medias":{"order":{"810710":{"id_media":810710,"type":"article","format":"image","height":138,"width":300,"status":null}}}}, 
+1

Der von Ihnen gepostete JSON stimmt nicht mit der Klasse "Post" überein, für die Sie die Deserialisierung durchführen. – Yogu

+0

Danke Yogu für deine Antwort, aber kannst du mir genauere Informationen über mein Problem geben? Ich bin komplett neu mit JSON.NET. –

+0

Siehe Darin Dimitrov oder meine Antwort. – Yogu

Antwort

10

Die JSON Struktur, die Sie nicht das Objekt Beitrag gezeigt haben, überein. Sie könnten zusätzliche Klassen definieren diese Struktur zu repräsentieren:

public class Root 
{ 
    public RootTab root_tab { get; set; } 
} 

public class RootTab 
{ 
    public ActuFil tab_actu_fil { get; set; } 
} 

public class ActuFil 
{ 
    public Post[] Data { get; set; } 
} 

public class Post 
{ 
    public String titre { get; set; } 
    public String aresum { get; set; } 
} 

und dann:

string feed = ... 
Root root = JsonConvert.DeserializeObject<Root>(feed); 
Post post = root.root_tab.tab_actu_fil.Data[0]; 

oder wenn Sie nicht möchten, dass diese zusätzlichen Objekte definieren Sie dies tun könnte:

var root = JsonConvert.DeserializeObject<JObject>(feed); 
Post[] posts = root["root_tab"]["tab_actu_fil"]["data"].ToObject<Post[]>(); 
string titre = posts[0].titre; 
+0

Um genauer zu sein, ich bin neu mit C# und ich möchte eine Sammlung von Objekten mit meiner Liste Root-Element. –

2

Die JSON-String Sie auf dem Laufenden enthält viel mehr als eine einzige Post. Um es zu deserialisieren, müssen Sie Klassen für alle in der JSON-Zeichenfolge enthaltenen Objekte entwerfen, sodass Sie durch Zugriff auf Eigenschaften durch die Daten navigieren können.

könnte Diese Klassen wie folgt sein:

class Feed { 
    public RootTab root_tab { get; set; } 
} 

class RootTab { 
    public TabActuFil tab_actu_fil {get; set; } 
} 

class TabActuFil { 
    public List<Post> data { get; set; } 
} 

class Post { 
    public string c_origine {get; set; } 
    public string titre {get; set; } 
} 
+0

Ok danke alles, was ich jetzt verstehe, D –

Verwandte Themen