Gibt es eine Möglichkeit, JSON-Inhalte in einen dynamischen C#-Typ zu deserialisieren? Es wäre schön, wenn man die Erstellung einer Reihe von Klassen überspringen könnte, um die DataContractJsonSerializer
.
Antworten
Zu viele Anzeigen?
Vivek Shukla
Punkte
1445
Nirupam
Punkte
122
Vasim Shaikh
Punkte
4345
vitaly-t
Punkte
22010
Chad Kuehn
Punkte
3781
Die Deserialisierung in JSON.NET kann dynamisch erfolgen, indem die JObject
Klasse, die in dieser Bibliothek enthalten ist. Mein JSON-String repräsentiert diese Klassen:
public class Foo {
public int Age {get;set;}
public Bar Bar {get;set;}
}
public class Bar {
public DateTime BDay {get;set;}
}
Jetzt deserialisieren wir die Zeichenkette OHNE Verweis auf die oben genannten Klassen:
var dyn = JsonConvert.DeserializeObject<JObject>(jsonAsFooString);
JProperty propAge = dyn.Properties().FirstOrDefault(i=>i.Name == "Age");
if(propAge != null) {
int age = int.Parse(propAge.Value.ToString());
Console.WriteLine("age=" + age);
}
//or as a one-liner:
int myage = int.Parse(dyn.Properties().First(i=>i.Name == "Age").Value.ToString());
Oder wenn Sie tiefer gehen wollen:
var propBar = dyn.Properties().FirstOrDefault(i=>i.Name == "Bar");
if(propBar != null) {
JObject o = (JObject)propBar.First();
var propBDay = o.Properties().FirstOrDefault (i => i.Name=="BDay");
if(propBDay != null) {
DateTime bday = DateTime.Parse(propBDay.Value.ToString());
Console.WriteLine("birthday=" + bday.ToString("MM/dd/yyyy"));
}
}
//or as a one-liner:
DateTime mybday = DateTime.Parse(((JObject)dyn.Properties().First(i=>i.Name == "Bar").First()).Properties().First(i=>i.Name == "BDay").Value.ToString());
Siehe Beitrag für ein vollständiges Beispiel.