2016-03-23 7 views
0

ich dieses JSON hier haben:Wie serialisiert man JSON, das sich mit RestSharp in eine C# -Klasse ändert?

{ 
    "id": "-KDYmr0aI0UmjKRyd465", 
    "name": "No Name", 
    "presentation": { 
     "fields": [ 
     { 
      "defaultValue": "Erste Node", 
      "id": "test", 
      "title": "test", 
      "type": "text" 
     }, 
     { 
      "defaultValue": "Zweite node", 
      "id": "test2", 
      "title": "test2", 
      "type": "text" 
     } 
     ] 
    }, 
    "thumbnail": "/images/defaultimage.png", 
    "updated": "2016-03-23T14:05:32+00:00", 
    "userData": { 
     "test": "Erste Node", 
     "test2": "Zweite node" 
    } 
    } 

Userdata ändert sich je nachdem, ob der Benutzer einige Daten hinzugefügt. So kann sagen, der Benutzer einige Daten wie {"test3":"More testdata"} hinzugefügt Userdata json würde wie folgt aussehen:

"userData": { 
     "test": "Erste Node", 
     "test2": "Zweite node", 
     "test3": "More testdata" 
    } 

Auch die Felder entsprechend würden modernisiert werden, aber ich weiß, wie ich die Felder zu einer C# Klasse Karte würde. Meine Frage ist, wie ich in der Lage wäre, diese Userdata als C# Klasse serialisiert werden - aber auch mit der Verwendung des RestSharp Client von hier: http://restsharp.org/

so ziemlich ist, wie meine Klassen aussehen würden. Aber ich weiß nicht, wie die Userdata zur Karte ...

public class Field 
{ 
    public string defaultValue { get; set; } 
    public string id { get; set; } 
    public string title { get; set; } 
    public string type { get; set; } 
} 

public class Presentation 
{ 
    public List<Field> fields { get; set; } 
} 

public class RootObject 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
    public Presentation presentation { get; set; } 
    public string thumbnail { get; set; } 
    public string updated { get; set; } 
    public UserData userData { get; set; } 
} 

Antwort

1

Sie können die json zu einer C# Klasse serialisiert JSON.NET verwendet, die ich bin sicher, Sie sind sich dessen bewusst (ich glaube, RestSharp diese Bibliothek verwendet). Wenn Sie Ihre Json aus dem Dienst Gebrauch DeserializeObject zurück und eine Klasse definieren, um zur Karte:

var json = "{ \"id\": \"-KDYmr0aI0UmjKRyd465\", \"name\": \"No Name\", \"presentation\": { \"fields\": [ { \"defaultValue\": \"Erste Node\", \"id\": \"test\", \"title\": \"test\", \"type\": \"text\" }, { \"defaultValue\": \"Zweite node\", \"id\": \"test2\", \"title\": \"test2\", \"type\": \"text\" } ] }, \"thumbnail\": \"/images/defaultimage.png\", \"updated\": \"2016-03-23T14:05:32+00:00\", \"userData\": { \"test\": \"Erste Node\", \"test2\": \"Zweite node\" } }"; 
var result = JsonConvert.DeserializeObject<RootObject>(json); 

Jetzt mit dem Userdata Knoten zu beschäftigen, die auf unterschiedliche Längen ändern können ich würde meine Klasse zu einem ‚dynamischen‘ Typ verändern welches mit diesen Daten umgehen kann. So würde meine Klasse geworden:

public class RootObject 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
    public Presentation presentation { get; set; } 
    public string thumbnail { get; set; } 
    public string updated { get; set; } 
    public dynamic userData { get; set; } 
} 

Um die dynamische Eigenschaft Userdata iterieren:

foreach(var data in result.userData) 
{ 
    var name = data.Name; 
    var value = data.Value; 
} 
+0

ich nie dynamische Klassen so benutzten können haben. Kann ich diese durchspielen oder wie würde ich sie in meinem Fall benutzen? – Kazoooka

+0

Aktualisierte Antwort mit einem Beispielcode. –

2

Ein kurzer Tipp hier ist, für Anwenderdaten sollten Sie Wörterbuch verwenden. Dies gibt Flexibilität, um so viele userData dynamisch hinzuzufügen (Schlüsselwertpaare). Wichtig ist, dass dies wie eine normale Klasse in JSON serialisiert wird.

1

Ich denke, Sie Wörterbuch userdata Eigenschaft

public class Field 
{ 
    public string defaultValue { get; set; } 
    public string id { get; set; } 
    public string title { get; set; } 
    public string type { get; set; } 
} 

public class Presentation 
{ 
    public List<Field> fields { get; set; } 
} 

public class RootObject 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
    public Presentation presentation { get; set; } 
    public string thumbnail { get; set; } 
    public string updated { get; set; } 
    public Dictionary<string, string> userData { get; set; } 
}