Können Sie Instanziieren ein Objekt Instanz von JSON in .NET?
Seit objektinitialisierer sind sich sehr ähnlich, JSON, und jetzt gibt es Anonyme Typen .NET. Es wäre cool, in der Lage sein, eine Zeichenfolge wie JSON, und erstellen Sie ein Anonymes Objekt, das Sie repräsentiert den JSON-string.
Verwenden Sie objektinitialisierer erstellen einer Anonymen Typ:
var person = new {
FirstName = "Chris",
LastName = "Johnson"
};
Geil wäre es, wenn Sie passieren könnte, in eine string-Repräsentation des Objekt-Initialisierer code (vorzugsweise etwas wie JSON) zum erstellen einer Instanz eines Anonymen Typs mit den Daten.
Ich weiß nicht, ob es möglich ist, da C# nicht dynamisch, und der compiler tatsächlich wandelt die objektinitialisierer einerd Anonyme Art in stark typisierten code ausgeführt werden kann. Dies erklärt sich in diesem Artikel.
Vielleicht Funktionalität zu nehmen, JSON und erstellen Sie ein Schlüssel/Wert-Wörterbuch mit es würde am besten funktionieren.
Ich weiß, kann man serialisieren/deserializer ein Objekt zu JSON in .NET, aber was ich Suche ist ein Weg, um ein Objekt zu erstellen, der im wesentlichen lose typisiert, ähnlich wie JavaScript funktioniert.
Kennt jemand die beste Lösung für, dies zu tun in .NET?
UPDATE: Zu klären, den Kontext, warum ich diese Frage... ich dachte, wie C#, könnte eine bessere Unterstützung von JSON in die Sprache der Ebene (eventuell) und ich versuchte, denken Sie an Möglichkeiten, dass es getan werden könnte, heute, aus konzeptionellen Gründen. So, ich dachte, ich würde es hier posten, um eine Diskussion zu beginnen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es Sprachen, die für .NET, die duck-typing, aber es ist nicht möglich, mit C# unter Verwendung Dot.Notation, da C# erfordert, dass alle Mitglied-Referenzen werden aufgelöst, zur compile-Zeit. Wenn Sie möchten, verwenden Sie den Punkt.Notation, haben Sie immer noch eine Klasse definieren, irgendwo mit den erforderlichen Eigenschaften, und verwenden Sie, was Methode Sie möchten, instanziieren Sie die Klasse aus der JSON-Daten. Pre-definieren einer Klasse hat haben Vorteile wie starke Typisierung, IDE-support, inklusive intellisense, und nicht sich Gedanken über Rechtschreibfehler. Sie können immer noch anonyme Typen:
Sollten Sie sich die JSON.net Projekt:
http://james.newtonking.com/pages/json-net.aspx
Sind Sie im Grunde reden über die Fähigkeit, Hydrat ein Objekt aus den JSON, die dies tun wird. Es wird nicht der anonyme Typen, aber vielleicht wird es Sie nahe genug.
Schrieb ich eine relativ kurze Methode die Parse-JSON und zurück ein name/Wert-Wörterbuch zugreifen können, ähnlich wie das eigentliche Objekt in JavaScript.
Hier ist ein Beispiel für die Nutzung der folgenden Methode:
Und hier ist der code für die ParseJsonToDictionary Methode:
Ich weiß, diese Methode kann ein wenig rau, und es könnte wohl optimiert werden, ganz ein bisschen, aber es ist der erste Entwurf und es funktioniert einfach.
Auch, bevor Sie sich beschweren, über die es keine regulären Ausdrücke, im Hinterkopf behalten, dass nicht jeder wirklich versteht reguläre Ausdrücke, und schreiben Sie es so machen würde, mehr für andere schwer zu beheben, wenn nötig. Auch, dass ich derzeit nicht weiß, regulärer Ausdruck nur zu gut, und die Zeichenfolge analysieren war einfach leichter.
Können Sie nicht wieder ein anonymer Typ aus einer Methode**, so eine "rehydriert" anonyme Art der Existenz wäre beschränkt auf die Verfahren, in denen es rehydriert. Irgendwie sinnlos.
** Sie können es als ein Objekt (dies erfordert die Reflexion auf seine Eigenschaften zugreifen,--yeech) oder Sie können die "cast it by example", das ist sinnlos, denn es nimmt zusätzliche Schritte, und es bedeutet, dass Sie bereits WISSEN, was den Typ des Objekts soll so Aussehen, warum also nicht einfach ein Objekt erstellen und füllen Sie es an die erste Stelle setzen?
Was ist die Anwendung dafür?
Würde ich nicht gehen diesen Weg für ein paar Gründe.
Ersten; es kann verlangen, eine Menge von support-code mit der spiegelung und eine solche zu erstellen, die transparente Methode, die Sie sprechen.
Zweiten, wie du schon sagtest, C# ist eine stark typisierte Sprache und Dinge wie diese wurden in der Sprache Spezifikation für einen Grund.
Dritten, der Aufwand dafür würde es sich nicht lohnen. Denken Sie daran, dass web-Seiten (vor allem AJAX-Abfragen) sollte wirklich schnell sein oder es Niederlagen der Zweck. Wenn Sie gehen Sie voran und verbringen Sie 50% der Serialisierung Ihrer Objekte zwischen C# - und Javascript-dann haben Sie ein problem.
Meine Lösung wäre, eine Klasse zu erstellen, die nur kapselt ein Wörterbuch, und das nimmt ein JSON-string als ctor-argument. Dann verlängern Sie einfach die Klasse für jede Art von JSON-Abfrage, die Sie behandeln möchten. Dies wird eine stark typisierte und schnellere Lösung, aber immer noch halten die Erweiterbarkeit und Benutzerfreundlichkeit. Der Nachteil ist, dass es mehr code zu schreiben, pro Art der JSON-Anfrage.
🙂