Ich möchte meine Dictionary<int,List<int>>
in JSON-Zeichenfolge konvertieren . Weiß jemand, wie man dies in C # erreicht?
c#
json
dictionary
daehaai
quelle
quelle
Antworten:
Das Serialisieren von Datenstrukturen, die nur numerische oder boolesche Werte enthalten, ist ziemlich einfach. Wenn Sie nicht viel zu serialisieren haben, können Sie eine Methode für Ihren spezifischen Typ schreiben.
Für a,
Dictionary<int, List<int>>
wie Sie angegeben haben, können Sie Linq verwenden:Wenn Sie jedoch mehrere verschiedene Klassen oder komplexere Datenstrukturen serialisieren oder insbesondere wenn Ihre Daten Zeichenfolgenwerte enthalten , ist es besser, eine seriöse JSON-Bibliothek zu verwenden, die bereits weiß, wie man mit Escapezeichen und Zeilenumbrüchen umgeht. Json.NET ist eine beliebte Option.
quelle
In dieser Antwort wird Json.NET erwähnt, es wird jedoch nicht näher erläutert, wie Sie mit Json.NET ein Wörterbuch serialisieren können:
Im Gegensatz zu JavaScriptSerializer
myDictionary
muss es kein Wörterbuch vom Typ sein,<string, string>
damit JsonConvert funktioniert.quelle
Json.NET serialisiert C # -Wörterbücher jetzt wahrscheinlich angemessen, aber als das OP diese Frage ursprünglich stellte, haben viele MVC-Entwickler möglicherweise die JavaScriptSerializer- Klasse verwendet, da dies die Standardoption war.
Wenn Sie an einem Legacy-Projekt (MVC 1 oder MVC 2) arbeiten und Json.NET nicht verwenden können, empfehle ich die Verwendung von a
List<KeyValuePair<K,V>>
anstelle von aDictionary<K,V>>
. Die ältere JavaScriptSerializer-Klasse serialisiert diesen Typ einwandfrei, hat jedoch Probleme mit einem Wörterbuch.Dokumentation: Serialisieren von Sammlungen mit Json.NET
quelle
Dies wird in die Konsole schreiben:
quelle
Einfache einzeilige Antwort
(
using System.Web.Script.Serialization
)Dieser Code konvertiert jeden
Dictionary<Key,Value>
inDictionary<string,string>
und serialisiert ihn dann als JSON-Zeichenfolge:Es ist anzumerken, dass so etwas
Dictionary<int, MyClass>
auch auf diese Weise serialisiert werden kann, während der komplexe Typ / das komplexe Objekt erhalten bleibt .Erklärung (Aufschlüsselung)
Sie können die Variable
yourDictionary
durch Ihre tatsächliche Variable ersetzen .Wir tun dies, weil sowohl der Schlüssel als auch der Wert vom Typ string sein müssen, als Voraussetzung für die Serialisierung von a
Dictionary
.quelle
System.Web.Extensions
nicht in der Client Framework-Version enthalten ist, sondern auch die Vollversion erfordert.Tut mir leid, wenn die Syntax das kleinste bisschen abweicht, aber der Code, von dem ich das bekomme, war ursprünglich in VB :)
quelle
In Asp.net Core verwenden Sie:
quelle
System.Core
und versuchte dann zu referenzierenusing Newtonsoft.Json
und keine Freude. Ich denke, esNewtonsoft
ist eine Bibliothek von Drittanbietern.Sie können verwenden
System.Web.Script.Serialization.JavaScriptSerializer
:quelle
Hier erfahren Sie, wie Sie nur Standard-.NET-Bibliotheken von Microsoft verwenden.
quelle
Dictionary<string, dynamic>
allen primitiven JSON-Typen wie Intergern, Floats, Booleschen Werten, Zeichenfolgen, sogar Nullen und innerhalb eines Objekts kombinieren und haben. +1Sie können JavaScriptSerializer verwenden .
quelle
string
. Ich habe hier eine Antwort gepostet, die diese enthält, wenn Sie einen Blick darauf werfen möchten.Es scheint viele verschiedene Bibliotheken zu geben und was in den letzten Jahren nicht zu kommen und zu gehen schien. Ab April 2016 hat diese Lösung für mich jedoch gut funktioniert. Saiten können leicht durch Ints ersetzt werden .
TL / DR; Kopieren Sie dies, wenn Sie dafür hierher gekommen sind:
Zwei Importpunkte. Stellen Sie zunächst sicher, dass Sie System.Runtime.Serliazation als Referenz in Ihrem Projekt im Projektmappen-Explorer von Visual Studio hinzufügen. Zweitens fügen Sie diese Zeile hinzu,
oben in der Datei mit dem Rest Ihrer Verwendungen, damit die
DataContractJsonSerializer
Klasse gefunden werden kann. Dieser Blog-Beitrag enthält weitere Informationen zu dieser Serialisierungsmethode.Datenformat (Eingabe / Ausgabe)
Meine Daten sind ein Wörterbuch mit 3 Zeichenfolgen, die jeweils auf eine Liste von Zeichenfolgen verweisen. Die Listen der Zeichenfolgen haben die Längen 3, 4 und 1. Die Daten sehen folgendermaßen aus:
Die in die Datei geschriebene Ausgabe befindet sich in einer Zeile. Hier ist die formatierte Ausgabe:
quelle
Dies ähnelt dem, was Meritt zuvor gepostet hat. poste einfach den kompletten Code
quelle
Wenn Ihr Kontext dies zulässt (technische Einschränkungen usw.), verwenden Sie die
JsonConvert.SerializeObject
Methode von Newtonsoft.Json : Dies erleichtert Ihnen das Leben.quelle