Wie Sie dynamisch erstellen Sie eine JSON-Objekt in c# (von einem ASP.NET Ressource-Datei)?
Brauche ich zum serialisieren des strings aus einer Ressource-Datei (.resx) in ein JSON-Objekt. Der Ressource-Datei die Schlüssel sind im Wandel und so kann ich nicht einfach erstellen Sie eine C# - Objekt, das akzeptiert die entsprechenden Werte ein. Es muß eine dynamische Lösung. Ich bin in der Lage, um eine Schleife durch die Schlüssel-Wert-Paare für die Datei, aber ich brauche eine einfache Möglichkeit, um zu serialisieren zu JSON.
Ich weiß, dass ich tun konnte:
Object thing = new {stringOne = StringResource.stringOne; ...}
Aber ich hätte lieber so etwas wie:
Object generic = {}
foreach (DictionaryEntry entry in StringResource) {
generic.(entry.Key) = entry.Value
}
Oder sollte ich Sie einfach erstellen Sie eine benutzerdefinierte JSON-serializer, baut das Objekt Stück für Stück (also eine foreach-Schleife, die Teil der JSON-string mit jedem Zyklus)?
BEARBEITEN
Ich landete schreiben eine schnelle JSON serializer, Konstrukte der string ein Feld zu einem Zeitpunkt. Ich wollte nicht, um eine ganze JSON-Bibliothek dies ist die einzige Verwendung von JSON-Objekten (für jetzt wenigstens). Letztlich, was ich wollte, ist wohl nicht praktikabel und existiert nicht, da es die Funktion ist besser gedient werden, durch andere Datenstrukturen. Danke für die vielen Antworten aber!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit C# 4.0, sollten Sie sich die Magische System.Dynamisch ist.ExpandoObject. Es ist ein Objekt, das ermöglicht das dynamische hinzufügen und entfernen von Eigenschaften zur Laufzeit mit der neuen DLR-in .NET 4.0. Hier ist ein gutes Beispiel für die ExpandoObject.
Sobald Sie vollständig gefüllt ist ExpandoObject, können Sie wahrscheinlich leicht serialisieren, dass mit jedem JSON-Bibliotheken erwähnt, die von anderen sehr guten Antworten.
IDictionary<string, object>
, und das wird Ihnen erlauben, zu bestimmen, Feld-Namen zur Laufzeit. Ein Beispiel dafür ist auf der MSDN-link zur Unterseite. Aber eine benutzerdefinierte serializer ist wahrscheinlich genauso gut.Das klingt wie ein Unfall auf uns zukommen (D. H. die Ausgabe vor der Zementierung der Struktur), aber es passiert.
Benutzerdefinierte JSON-serializer ist eine überzeugende option, da es Ihnen erlaubt, leicht zu bewegen von Ihrem dictionary in einen JSON-format. Ich würde schauen, open-source-libraries (JSON.NET etc), um zu sehen, wenn Sie können, reduzieren Sie die Entwicklungszeit.
Ich denke auch, dass die Einrichtung in einem leicht strukturierten format, wie XML, ist eine gute Wahl. Es ist ganz einfach zu serialisieren von XML zu JSON unter Verwendung bestehender Bibliotheken, so vermeiden Sie starke Anpassungen/
Die wichtigere Frage ist, welche Zwecke werden die Daten dienen letztlich. Wenn Sie dieses problem beheben, indem Sie entweder von diesen Methoden, sind Sie erstellen größere Probleme in der Zukunft.
Wahrscheinlich würde ich JSON.NET und die Fähigkeit,erstellen von JSON von XML.
Könnte dann erstellen Sie eine XML-in-memory und lassen Sie JSON.NET konvertieren von JSON für Sie. Vielleicht, wenn Sie Graben tiefer in die API, es gibt auch andere Optionen, auch.
Newtonsoft ist eine Bibliothek, die alle Arten von nette JSON-tools...unter Ihnen, on-the-fly one-line-serializer und deserializers...check it out, es ist mein Lieblings-JSON-Bibliothek gibt
http://james.newtonking.com/pages/json-net.aspx
Wenn ich mich richtig erinnere, hat es eine Klasse konvertieren von JSON ein .NET-Objekt, ohne das zu schaffen .NET Objekt zuerst. Denke, es ist im Json-Format.Konvertieren Klasse
Den Weg, den ich tun es ist:
var serialiser = neue System.Web.Script.Serialisierung.JavaScriptSerializer();
string json = serialiser.Serialize(data);
Kontext.Antwort.Write(json);