Versuch, eine JSON-Zeichenfolge in ein Objekt in C # zu konvertieren. Verwenden eines wirklich einfachen Testfalls:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Das Problem ist, dass route_list niemals gesetzt wird. Es ist ein undefiniertes Objekt. Irgendwelche Ideen?
JavaScriptSerializer
Version von over MS, da sie nichts anderes als die benutzerdefinierte JSON-Formatierung von WCF akzeptiert (z. B. Datumsfelder, die wie Datumsangaben aussehen, aber nicht in DATE () enthalten sind, schlagen kläglich fehl)Antworten:
Es sieht so aus, als würden Sie versuchen, ein Rohobjekt zu deserialisieren. Sie können eine Klasse erstellen, die das Objekt darstellt, in das Sie konvertieren. Dies ist am nützlichsten in Fällen, in denen Sie mit größeren Objekten oder JSON-Strings arbeiten.
Zum Beispiel:
Dann wäre Ihr Deserialisierungscode:
Weitere Informationen finden Sie in diesem Tutorial: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
quelle
Sie können die Newtownsoft.Json-Bibliothek auch wie folgt verwenden:
Wo
T
ist Ihr Objekttyp, der mit Ihrer JSON-Zeichenfolge übereinstimmt?quelle
Sie möchten wahrscheinlich nicht nur route_list als
object
Typ deklarieren . Es hat keine .test-Eigenschaft, so dass Sie wirklich kein schönes Objekt zurückbekommen. Dies ist einer der Orte, an denen Sie besser eine Klasse oder eine Struktur definieren oder das dynamische Schlüsselwort verwenden sollten.Wenn Sie wirklich möchten, dass dieser Code so funktioniert, wie Sie ihn haben, müssen Sie wissen, dass das von DeserializeObject zurückgegebene Objekt ein generisches Wörterbuch aus Zeichenfolge und Objekt ist. Hier ist der Code, um es so zu machen:
Wenn Sie das dynamische Schlüsselwort verwenden möchten, können Sie hier lesen, wie .
Wenn Sie eine Klasse oder Struktur deklarieren, können Sie Deserialize anstelle von DeserializeObject wie folgt aufrufen:
quelle
object routes_list
. Verwenden Sievar
oder wiederholen Sie sich explizit und deklarieren Sie route_list als IDictionary <string, object>.Verwenden eines dynamischen Objekts mit JavaScriptSerializer.
quelle
Newtonsoft ist schneller als der Java Script Serializer. ... dies hängt vom Newtonsoft NuGet-Paket ab, das beliebt und besser als der Standard-Serializer ist.
Einzeilencode-Lösung.
quelle
Hier ist eine einfache Klasse, die ich aus verschiedenen Beiträgen zusammengeschustert habe. Sie wurde ungefähr 15 Minuten lang getestet, scheint aber für meine Zwecke zu funktionieren. Es wird verwendet
JavascriptSerializer
, um die Arbeit zu erledigen, auf die in Ihrer App anhand der in diesem Beitrag beschriebenen Informationen verwiesen werden kann .Der folgende Code kann in LinqPad ausgeführt werden, um ihn zu testen:
Ich hoffe es hilft!
quelle
Sie können Ihre Anforderung einfach mithilfe der Newtonsoft.Json-Bibliothek erfüllen. Ich schreibe das eine Beispiel unten auf, schau es dir an.
Klasse für den Objekttyp, den Sie erhalten:
Code:
Dies ist eine sehr einfache Möglichkeit, Ihren JSON zu analysieren.
quelle
Wie tripletdad99 sagte
Wenn Sie jedoch kein zusätzliches Objekt erstellen möchten, können Sie es
Dictionary
stattdessen erstellenquelle
Fügen Sie diese DDL hinzu, um auf Ihr Projekt zu verweisen: System.Web.Extensions.dll
Verwenden Sie diesen Namespace: using System.Web.Script.Serialization;
quelle
Kopieren Sie Ihren Json und fügen Sie ihn in das Textfeld auf json2csharp ein und klicken Sie auf die Schaltfläche Generieren.
Eine cs- Klasse wird unter Verwendung dieser cs-Datei wie unten generiert
Wo
RootObject
ist der Name der generierten CS- Datei ?quelle
Eine weitere schnelle und einfache Möglichkeit, diese Schritte halbautomatisch durchzuführen, besteht darin:
app.quicktype.io hat Serialisierungsmethoden basierend auf Newtonsoft generiert. Alternativ können Sie jetzt Code verwenden wie:
WebClient-Client = neuer WebClient ();
Zeichenfolge myJSON = client.DownloadString (" https://URL_FOR_JSON.com/JSON_STUFF ");
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject (myJSON);
quelle
Konvertieren Sie eine JSON-Zeichenfolge in ein Objekt in C #. Mit dem folgenden Testfall .. es hat bei mir funktioniert. Hier ist " MenuInfo " mein C # -Klassenobjekt .
quelle
Zuerst müssen Sie eine Bibliothek einschließen wie:
quelle