Serialisieren Wörterbücher mit JavaScriptSerializer
Offenbar IDictionary<string,object>
serialisiert wird als ein array von KeyValuePair
Objekte (z.B. [{Key:"foo", Value:"bar"}, ...]
). Ist es möglich, um es zu serialisieren, wie ein Objekt statt (z.B. {foo:"bar"}
)?
- ja, dont verwenden Sie JavaScriptSerializer seiner ganz Mist. Verwenden Newtonsoft Json.NET
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl ich bin damit einverstanden, dass JavaScriptSerializer ist ein Mist und Json.Net ist eine bessere option, es ist ein Weg, in dem Sie machen können, JavaScriptSerializer serialisieren, wie Sie wollen.
Sie müssen registrieren Sie einen Konverter aus, und überschreiben Sie die Serialize-Methode, mit so etwas wie dieses:
Hoffe, das hilft!
instance
variable ` Class-Objekt` hat keine Methode add.Nein, es ist nicht möglich, mit JavaScriptSerializer. Es ist möglich, mit Json.NET:
dann:
produzieren würde, die gewünschten:
JavaScriptSerializer
. Also, wenn Sie Probleme haben mit Json.NET ich weiß nicht, was zu sagen über die alternative 🙂 Wie weit, wie Ihre andere Frage betrifft, das ist völlig normales Verhalten. Alle von Ihnen angegebenen der serializer ist ein dictionary von string-und Objekt. So sind Sie bei arbeiten mit schwach typisierte Wörterbücher in Ihrem code, was erwarten Sie im Gegenzug? Alles, was Sie bekommen können, sind natürlich eine schwach typisierte JObjects. Verwenden Sie ein stark typisiertes dictionary:Dictionary<string, SomeModel>
gibt es einen Unterschied.Dictionary
vsIDictionary
-- es bekam. Danke.Konnte ich lösen mit JavaScriptSerializer mit Linq Wählen Sie:
.Serialize(dictionary)
. Seine einfacher dann JsonConvert, bereit zu verwenden. Ich wünschte, ich könnte geben +2 auf diese AntwortKonnte ich lösen es mithilfe der JavaScriptSerializer, der trick ist, zu erstellen Sie Ihren eigenen Konverter. Der folgende code funktioniert code:
Und hier ist, wie Sie es verwenden:
Hier ist eine glaube ich eine verbesserte version von Tomas Antwort. Funktioniert wie ein Charme. Wir könnten auch einen Scheck für die ScriptIgnore Attribut aber gut, tobt Euch aus.
BTW, ich wählte JavaScriptSerializer, weil meiner Meinung nach third-party-Lösungen sind die meisten der Zeit: weniger bekannt, lange zu installieren, oft vergessene pre-requities und blur-Kopie-Recht besagt, dass Sie riskant zu verteilen in der Wirtschaft.
P-S: ich habe nicht verstanden, warum wir haben versucht, zu Deserialisieren sowohl auf die Instanz und die Instanz als ein Wörterbuch, so dass ich ausgezogen, das Teil.