JSON Deserialisieren in C# ein dynamisches Objekt?
Gibt es eine Möglichkeit zu Deserialisieren JSON-Inhalt in ein C# 4 dynamische Typ? Es wäre schön, zu überspringen, erstellen Sie eine Reihe von Klassen, um den DataContractJsonSerializer.
Wenn Sie möchten, dass etwas "dynamisch", warum nicht einfach eine get-style-Accessoren, die kommen mit den meisten JSON-Decoder, die nicht plain-old-Objekt? (z.B. gibt es wirklich eine Notwendigkeit für das "dynamische" Objekt-Erstellung?) json.org hat eine Reihe von links zu C# JSON-Implementierungen.
Ich arbeite an einem Projekt, das versucht, zu verhindern, dass externe Abhängigkeiten auf ein minimum. Also, wenn es möglich ist, etwas mit der Börse .net serialisierungsprogramme und Arten, die bevorzugt würde. Natürlich, wenn es nicht möglich ist, bin ich schlagen json.org. Danke!
Ich bin wirklich überrascht, das C# - team Hinzugefügt 'dynamische' aber dann gibt es keinen Weg, der in der CLR, um zu konvertieren ein JSON-Objekt, um eine dynamische CLR-Instanz der Klasse.
Leider akzeptiert die Antwort nicht .NET 4 RTM. Ich geschrieben eine Antwort, die mir geholfen bekommen will, die nützlich sein könnten für andere.
(Obwohl es scheint, dass die Newtonsoft JSON.NET Recht nahe kommt. Es gibt keine wirklich guten Beispiele, obwohl.)
Ich arbeite an einem Projekt, das versucht, zu verhindern, dass externe Abhängigkeiten auf ein minimum. Also, wenn es möglich ist, etwas mit der Börse .net serialisierungsprogramme und Arten, die bevorzugt würde. Natürlich, wenn es nicht möglich ist, bin ich schlagen json.org. Danke!
Ich bin wirklich überrascht, das C# - team Hinzugefügt 'dynamische' aber dann gibt es keinen Weg, der in der CLR, um zu konvertieren ein JSON-Objekt, um eine dynamische CLR-Instanz der Klasse.
Leider akzeptiert die Antwort nicht .NET 4 RTM. Ich geschrieben eine Antwort, die mir geholfen bekommen will, die nützlich sein könnten für andere.
(Obwohl es scheint, dass die Newtonsoft JSON.NET Recht nahe kommt. Es gibt keine wirklich guten Beispiele, obwohl.)
InformationsquelleAutor jswanson | 2010-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie froh sind, eine Abhängigkeit von der
System.Web.Helpers
Montage, dann können Sie dieJson
Klasse:Enthalten ist, mit dem MVC-framework als zusätzliche download -.NET 4-framework. Sicher sein, geben Vlad ein upvote, wenn das ist hilfreich!!! Allerdings, wenn Sie können nicht annehmen, dass die client-Umgebung enthält diese DLL, dann Lesen Sie weiter.
Alternative deserialisation Vorgehen vorgeschlagen hier. Ich veränderte den code etwas um einen bug zu beheben und für meinen coding-Stil. Alles, was Sie brauchen, ist dieser code und ein Verweis auf
System.Web.Extensions
aus dem Projekt:Können Sie es verwenden, wie diese:
So, da ein JSON-string:
Der folgende code funktioniert bei Laufzeit:
Sie können mit System.Web.Helferinnen und Helfer.Json - es bietet eine Decode-Methode zurückgibt, die ein dynamisches Objekt. Ich habe auch geschrieben, diese info als Antwort.
Das half mir sehr, aber ich bin neugierig, was soll ich tun, wenn ich die benutzen müssen .Serialize-Methode, die derzeit nur eine NotImplementedException... ich bin nicht allzu vertraut mit versiegelten Klassen und/oder erweiterten abstrakten Klassen. Kann jemand mich in die richtige Richtung?
manchmal in js haben Sie Felder mit Sonderzeichen wie "hintergrund-Farbe". Für den Zugang zu solchen Feldern in js-tun Sie obj["background-color"]. Wie kann ich den Zugriff auf solche Felder von c# nach dem Deserialisieren, um dynamische Objekt? Ich kann nicht tun, obj.hintergrund-Farbe, natürlich, und obj["Hintergrundfarbe"] scheint nicht zu funktionieren. Es wäre schön, wenn das dynamische Objekt könnte auch Sie zugegriffen werden wie ein Wörterbuch, zur gleichen Zeit, genau wie in js.
Ich bin wahrscheinlich ein bisschen spät, aber vielleicht hilft zukünftigen Besuchern. Ich hatte das gleiche problem, nur mit dem Feld-Namen
params
(das ist ein Schlüsselwort in C#). NebenTryGetMember
können Sie überschreibenTryGetIndex
, die Ihnen genau das gleiche Verhalten wie in JS. Dann können Sieobj["params"]
oderobj["background-color"]
schwer Feldnamen.InformationsquelleAutor Drew Noakes
Es ist ziemlich einfach, mit Json.NET:
Auch
using Newtonsoft.Json.Linq
:Dokumentation: Abfragen von JSON mit dynamischen
stuff
etwas wie:foreach (Newtonsoft.Json.Linq.JProperty jproperty in stuff) { Console.WriteLine("jproperty.Name = {0}", jproperty.Name);}
Was ist der Unterschied zwischen JsonConvert.DeserializeObject und JObject.Parse ? Die Antwort ist über Sie beide in der gleichen Art und Weise zu tun, die gleiche Sache, aber erklärt nicht den Unterschied.
Dies versucht. Es hat bei mir nicht funktioniert. Es sagt, dass "JObject nicht umsetzen 'Name'".
kein Unterschied: stackoverflow.com/questions/23645034/...
Ich kann nicht ankommen dieses zu wirken. Ich habe verengt das Thema auf, wobei in einer
async
Methode. Wenn ich die Methode synchron funktioniert es wie erwartet. Allerdings wird die Methodeasync
und ich nicht erhalten Sie einedynamic
, bekomme ich nur eineobject
. Die explizite Umwandlung bringt nichts, noch macht mir einfach einobject
. Ist wer sonst erleben dies?InformationsquelleAutor Tom Peplow
Können Sie dies tun, indem Sie System.Web.Helferinnen und Helfer.Json - seine Decode-Methode gibt ein dynamisches Objekt, das Sie durchsuchen können, wie Sie möchten.
Es ist im System enthalten.Web.Helfer Montage (.NET 4.0).
Sie finden diese assembly in der Extensions-Gruppe unter Assemblys in Visual Studio 2012
Probleme mit dynamischen ? Wie können wir die Ausnahmen behandeln effizient, wenn der Eingang JSON enthält nicht die Eigenschaften..
Wenn Sie wollen, sind zu stark, geben Sie das Modell, dann achten Sie auf die Verwendung von Json.Decode<T>(string) - Methode.
Fügen Sie diese Bibliothek in Ihr Projekt ein: stackoverflow.com/questions/8037895/...
InformationsquelleAutor Vlad Iliescu
.NET 4.0, hat eine integrierte Bibliothek, dies zu tun:
Dies ist der einfachste Weg.
Dictionary<string,object>
. Es sei denn, ich bin fehlt etwas, Ihr Beispiel nicht wieder ein dynamisches Objekt.Das funktioniert nicht, es einfach nur wieder ein dict in form eines dynamischen
Lange habe ich glaube ich nicht zu sagen, meine Fall ist klar, lieber Freund. Lassen Sie mich versuchen zu korrigieren, mein Fehler. Ich weiß, was eine Dynamik ist. Dies ermöglicht es Ihnen nicht passieren, in ein JSON-Objekt, und verwenden Sie d....code, Sie würde tun müssen, d["code"].Wert, das ist nicht das, was die meisten Leute finden diese Antwort möchten, wir bereits wissen, wie man das Wörterbuch und Gießen es in einen dynamischen ist eine völlige Verschwendung von Zeit. Ich respektvoll widersprechen, sir.
bereits verschwendet diesen Minuten versucht seinen code cus ich habe nicht die Kommentare Lesen, oder runtergescrollt 🙁
bereits wissen, wie man das Wörterbuch und Gießen es in einen dynamischen. Es muss nicht ein dictionay. Json haben auch Listen neben Wörterbuch. Und auch Listen und Wörterbücher konnten geschachtelt werden. Mein code könnte mit all diesen Situationen. ABER deine Methode kann NICHT.
InformationsquelleAutor Peter Long
Einfache "string JSON-Daten" zu widersprechen, ohne third-party DLL-Datei:
Hinweis: Sie können auch mit Ihrem benutzerdefinierten Objekt.
ja, es ist ganz einfach 🙂 irgendwann müssen Sie serialisieren wollen aber nicht enthalten 3. Teil-dll
Können Sie näher erläutern : wie dynamisch können auf die Deserialisierten Objekt über :
myObject["myprop"]
? Ich weiß, es ist getan auf die Laufzeit, sondern, wie der Zugriff übermyObject["myprop"]
gültig ist ?Sie können Ihr Objekt Deserialisieren wie Personal item = serializer.Deserialisieren<Personal>(getString); und wenn Sie dynamische Objekt auch Sie können mit array und alles ist möglich, wie everyobject
Um das System zu nutzen.Web.Script.Serialization-namespace Ihres Projekts muss ein Verweis auf System.Web.Extensions.
InformationsquelleAutor İbrahim Özbölük
JsonFx kann Deserialisieren von JSON-Inhalten in dynamische Objekte.
InformationsquelleAutor jbtule
Machte ich eine neue version des DynamicJsonConverter verwendet Expando-Objekte. Ich verwendet, expando-Objekte, denn ich wollte Serialisieren Sie die Dynamik zurück in das JSON verwenden Json.NET.
InformationsquelleAutor Jason Bolton
Andere Weise mit Newtonsoft.Json:
InformationsquelleAutor Jonas Lundgren
Der einfachste Weg ist:
Nur sind diese DLL-Datei.
Verwenden Sie code wie diesen:
InformationsquelleAutor user1006544
Verlängern Sie die JavaScriptSerializer rekursiv kopieren Sie das Wörterbuch es geschaffen, um expando-Objekt(s) und verwenden Sie dann diese dynamisch:
Dann müssen Sie nur mit einer using-Anweisung für den namespace, die Sie definiert die Erweiterung in (betrachten Sie nur definieren, Sie in das System.Web.Script.Serialisierung... ein weiterer trick ist, nicht mit einem namespace, dann brauchen Sie nicht die using-Anweisung), und Sie können, verbrauchen Sie etwa so:
InformationsquelleAutor alonzofox
Können Sie
using Newtonsoft.Json
resolvedEvent.Event.Data
ist meine Antwort immer aus Berufung-core-Ereignis .InformationsquelleAutor Vivek Shukla
Für die ich nutzen würde JSON.NET zu tun, die low-level-Parsen der JSON-stream und aufzubauen, der dann die Objekt-Hierarchie von Instanzen der
ExpandoObject
Klasse.InformationsquelleAutor Daniel Earwicker
Ich bin mit so in meinem code, und es funktioniert Prima
InformationsquelleAutor Vasim Shaikh
Sich den Artikel schrieb ich auf CodeProject, Antwort auf die Frage nicht genau:
Dynamische Typen mit JSON.NET
Es ist viel zu viel für das re-posten Sie hier alles, und noch weniger, seit dieser Artikel hat eine Anlage mit der Taste/den gewünschten Quell-Datei.
InformationsquelleAutor vitaly-t
Benutze ich http://json2csharp.com/ um eine Klasse, die das JSON-Objekt.
Eingang:
Ausgabe:
Nach, dass ich Newtonsoft.Json zu füllen Klasse:
Können Sie es so nennen:
PS:
Wenn Ihr JSON-variable name ist kein Gültiger C# - Namen (name beginnt mit
$
), die Sie beheben können, wie diese:InformationsquelleAutor RoJaIt
Deserialisieren in JSON.NET kann dynamisch sein mit der
JObject
Klasse, die enthalten ist in dieser Bibliothek. Mein JSON-string stellt folgenden Klassen:Nun wir Deserialisieren der string, OHNE Bezug auf die oben genannten Klassen:
Oder wenn Sie wollen, tiefer zu gehen:
Sehen post für ein komplettes Beispiel.
InformationsquelleAutor Chad Kuehn
Dem Objekt, das Sie wollen DynamicJSONObject enthalten ist in der System.Web.Helpers.dll aus der ASP.NET Web-Seiten-Paket, das Teil von WebMatrix.
InformationsquelleAutor Nick Daniels
Es ist ein leichtes JSON-Bibliothek für C# genannt SimpleJson.
Unterstützt .NET 3.5+, Silverlight-und Windows Phone 7.
Er unterstützt dynamische für .NET 4.0
Es kann auch installiert werden, wie ein NuGet-Paket
InformationsquelleAutor prabir
Verwenden Datensatz(C#) mit JavaScript. Eine einfache Funktion zum erstellen einer JSON-stream mit DataSet-Eingang. Erstellen von JSON-Inhalten wie (multi-Tisch-dataset):
Nur client-Seite, die mit eval. Zum Beispiel,
Dann verwenden:
InformationsquelleAutor Behnam Mohammadi
Versuchen Sie dies:
InformationsquelleAutor Nirupam
Bekommen ein ExpandoObject:
InformationsquelleAutor Ryan Norbauer
, Wie zu analysieren einfache JSON-Inhalten mit dynamischen & JavaScriptSerializer
Fügen Sie bitte die Referenz der System.Web.Erweiterungen und fügen Sie diesen namespace
using System.Web.Script.Serialization;
oben:, Wie zu analysieren verschachtelten & komplexe json mit dynamic & JavaScriptSerializer
Fügen Sie bitte die Referenz der System.Web.Erweiterungen und fügen Sie diesen namespace
using System.Web.Script.Serialization;
oben:InformationsquelleAutor Mist
Eine weitere option ist "Paste JSON as classes" so kann es sein, deserialised schnell und einfach.
Hier ist eine bessere Erklärung n piccas... 'Paste JSON As Classes' in ASP.NET und Web Tools 2012.2 RC
InformationsquelleAutor nitsram
Mit Cinchoo ETL - ein open-source-Bibliothek zum Parsen von JSON in ein dynamisches Objekt:
Ausgabe:
Disclaimer: ich bin der Autor dieser Bibliothek.
InformationsquelleAutor RajN