Wie kann ein JSON-Objekt in c # (aus einer ASP.NET-Ressourcendatei) dynamisch erstellt werden?

8

Ich muss die Zeichenfolgen aus einer Ressourcendatei (.resx) in ein JSON-Objekt serialisieren. Die Schlüssel der Ressourcendatei sind im Fluss und daher kann ich nicht einfach ein C # -Objekt erstellen, das die entsprechenden Werte akzeptiert. Es muss eine dynamische Lösung sein. Ich bin in der Lage, die Schlüssel-Wert-Paare für die Datei zu durchlaufen, aber ich brauche eine einfache Möglichkeit, sie zu JSON zu serialisieren.

Ich weiß, ich könnte tun:

%Vor%

Aber ich hätte lieber etwas wie:

%Vor%

Oder soll ich einfach einen benutzerdefinierten JSON-Serializer erstellen, der das Objekt stückweise konstruiert (d. h. foreach-Schleife, die bei jedem Zyklus einen Teil der JSON-Zeichenfolge anfügt)?

BEARBEITEN
Ich schrieb einen schnellen JSON-Serializer, der die Zeichenfolge ein Feld nach dem anderen erstellt. Ich wollte keine ganze JSON-Bibliothek hinzufügen, da dies die einzige Verwendung von JSON-Objekten ist (zumindest jetzt). Letztendlich ist das, was ich wollte, wahrscheinlich unpraktisch und existiert nicht, da seine Funktion anderen Datenstrukturen besser dient. Danke für alle Antworten!

    
Collin M 07.07.2011, 16:30
quelle

5 Antworten

7

Wenn Sie C # 4.0 verwenden, sollten Sie sich das magische System.Dynamic.ExpandoObject . Es ist ein Objekt, mit dem Sie Eigenschaften zur Laufzeit dynamisch hinzufügen und entfernen können, indem Sie das neue DLR in .NET 4.0 verwenden. Hier ist ein gutes Beispiel für das ExpandoObject.

Sobald Sie Ihr voll bestücktes ExpandoObject haben, können Sie es wahrscheinlich leicht mit einer der JSON-Bibliotheken serialisieren, die von den anderen ausgezeichneten Antworten erwähnt werden.

    
Phil 07.07.2011, 16:52
quelle
1

Das klingt wie ein Unfall, der darauf wartet, passiert zu werden (d. h. Erzeugung vor dem Zementieren der Struktur), aber es passiert.

Der benutzerdefinierte JSON-Serializer ist eine überzeugende Option, da Sie auf einfache Weise von Ihrem Wörterbuch in ein JSON-Format wechseln können. Ich würde Open-Source-Bibliotheken (JSON.NET, etc) betrachten, um zu sehen, ob Sie die Entwicklungszeit reduzieren können.

Ich denke auch, dass die Einrichtung in einem etwas strukturierteren Format wie XML eine gute Wahl ist. Es ist relativ einfach, mit vorhandenen Bibliotheken von XML zu JSON zu serialisieren, so dass Sie eine starke Anpassung vermeiden.

Die größere Frage ist, zu welchen Zwecken die Daten letztendlich dienen. Wenn Sie dieses Problem mit einer dieser Methoden lösen, schaffen Sie in Zukunft größere Probleme.

    
Gregory A Beamer 07.07.2011 16:35
quelle
0

Wahrscheinlich würde ich JSON.NET und die Möglichkeit, JSON aus XML erstellen .

Dann könnten Sie einen XML-In-Memory erstellen und JSON.NET für Sie in JSON konvertieren lassen. Vielleicht, wenn Sie tiefer in die API eintauchen, gibt es auch andere Möglichkeiten.

    
Uwe Keim 07.07.2011 16:31
quelle
0

Newtonsoft ist eine Bibliothek mit allen möglichen JSON-Tools ... darunter On-the-Fly-One-Line-Serializer und Deserializer ... schau es dir an, es ist meine Lieblings-JSON-Bibliothek da draußen

Ссылка

Wenn ich mich richtig erinnere, hat es eine Klasse, die JSON in ein .NET-Objekt konvertiert, ohne das .NET-Objekt zuerst erstellen zu müssen. Denke, es ist in der Json.Convert-Klasse

    
J Benjamin 07.07.2011 16:35
quelle
0

So mache ich es:

var serialiser = new System.Web.Script.Serialization.JavaScriptSerializer (); Zeichenfolge json = serialiser.Serialize (Daten); context.Response.Write (json);

    
Sachin Kainth 07.07.2011 16:38
quelle

Tags und Links