1124 Stimmen

JSON in C# dynamisches Objekt deserialisieren?

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 .

6voto

Vivek Shukla Punkte 1445

Sie können verwenden using Newtonsoft.Json

var jRoot = 
 JsonConvert.DeserializeObject<dynamic>(Encoding.UTF8.GetString(resolvedEvent.Event.Data));

resolvedEvent.Event.Data ist meine Antwort, die ich beim Aufruf von Core Event erhalte.

5voto

Nirupam Punkte 122

Versuchen Sie dies:

  var units = new { Name = "Phone", Color= "White" };
    var jsonResponse = JsonConvert.DeserializeAnonymousType(json, units);

5voto

Vasim Shaikh Punkte 4345

Ich verwende in meinem Code Folgendes und es funktioniert gut

using System.Web.Script.Serialization;
JavaScriptSerializer oJS = new JavaScriptSerializer();
RootObject oRootObject = new RootObject();
oRootObject = oJS.Deserialize<RootObject>(Your JSon String);

5voto

vitaly-t Punkte 22010

Schauen Sie sich den Artikel an, den ich auf CodeProject geschrieben habe und der genau diese Frage beantwortet:

Dynamische Typen mit JSON.NET

Es ist viel zu viel, um alles hier noch einmal zu posten, und noch weniger sinnvoll, da der Artikel einen Anhang mit der wichtigen/erforderlichen Quelldatei enthält.

4voto

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X