Je veux convertir ma Dictionary<int,List<int>>
chaîne en JSON. Quelqu'un sait-il comment y parvenir en C #?
c#
json
dictionary
daehaai
la source
la source
Réponses:
La sérialisation des structures de données contenant uniquement des valeurs numériques ou booléennes est assez simple. Si vous n'avez pas grand-chose à sérialiser, vous pouvez écrire une méthode pour votre type spécifique.
Pour un
Dictionary<int, List<int>>
comme vous l'avez spécifié, vous pouvez utiliser Linq:Mais, si vous sérialisez plusieurs classes différentes, ou des structures de données plus complexes, ou surtout si vos données contiennent des valeurs de chaîne , vous feriez mieux d'utiliser une bibliothèque JSON réputée qui sait déjà comment gérer des choses comme les caractères d'échappement et les sauts de ligne. Json.NET est une option populaire.
la source
Cette réponse mentionne Json.NET mais s'arrête avant de vous dire comment vous pouvez utiliser Json.NET pour sérialiser un dictionnaire:
Contrairement à JavaScriptSerializer, il
myDictionary
n'est pas nécessaire<string, string>
que JsonConvert fonctionne comme un dictionnaire de type .la source
Json.NET sérialise probablement correctement les dictionnaires C # maintenant, mais lorsque l'OP a initialement publié cette question, de nombreux développeurs MVC utilisaient peut-être la classe JavaScriptSerializer , car c'était l'option par défaut prête à l'emploi .
Si vous travaillez sur un projet existant (MVC 1 ou MVC 2), et vous ne pouvez pas utiliser Json.NET, je vous recommande d'utiliser un au
List<KeyValuePair<K,V>>
lieu d'unDictionary<K,V>>
. La classe héritée JavaScriptSerializer sérialisera très bien ce type, mais elle aura des problèmes avec un dictionnaire.Documentation: sérialisation des collections avec Json.NET
la source
Cela écrira sur la console:
la source
Réponse simple en une ligne
(
using System.Web.Script.Serialization
)Ce code convertira tout
Dictionary<Key,Value>
enDictionary<string,string>
, puis le sérialisera en tant que chaîne JSON:Il est intéressant de noter que quelque chose comme
Dictionary<int, MyClass>
peut également être sérialisé de cette manière tout en préservant le type / objet complexe.Explication (ventilation)
Vous pouvez remplacer la variable
yourDictionary
par votre variable réelle.Nous faisons cela, car la clé et la valeur doivent être de type chaîne, comme condition requise pour la sérialisation d'un fichier
Dictionary
.la source
System.Web.Extensions
n'est pas dans la version Client Framework, mais nécessite également la version complète.Désolé si la syntaxe est la plus petite, mais le code à partir duquel je l'obtiens était à l'origine en VB :)
la source
Dans Asp.net Core, utilisez:
la source
System.Core
et ensuite essayé de référencerusing Newtonsoft.Json
et pas de joie. Je pense queNewtonsoft
c'est une bibliothèque tierce.Vous pouvez utiliser
System.Web.Script.Serialization.JavaScriptSerializer
:la source
Voici comment procéder en utilisant uniquement les bibliothèques .Net standard de Microsoft…
la source
Dictionary<string, dynamic>
et avoir tous les types primitifs JSON tels que les entiers, les flottants, les booléens, les chaînes, même les valeurs nulles et dans un seul objet. +1Vous pouvez utiliser JavaScriptSerializer .
la source
string
. J'ai publié ici une réponse qui inclut cela, si vous voulez jeter un coup d'œil.Il semble que beaucoup de bibliothèques différentes et ce qui n'a pas semblé aller et venir au cours des années précédentes. Cependant, en avril 2016, cette solution fonctionnait bien pour moi. Cordes facilement remplacées par des ints .
TL / DR; Copiez ceci si c'est pour cela que vous êtes venu ici:
Deux points d'importation. Tout d'abord, assurez-vous d'ajouter System.Runtime.Serliazation comme référence dans votre projet dans l'Explorateur de solutions de Visual Studio. Deuxièmement, ajoutez cette ligne,
en haut du fichier avec le reste de vos utilisations, afin que la
DataContractJsonSerializer
classe puisse être trouvée. Ce billet de blog contient plus d'informations sur cette méthode de sérialisation.Format de données (entrée / sortie)
Mes données sont un dictionnaire avec 3 chaînes, chacune pointant vers une liste de chaînes. Les listes de chaînes ont des longueurs 3, 4 et 1. Les données ressemblent à ceci:
La sortie écrite dans le fichier sera sur une ligne, voici la sortie formatée:
la source
Ceci est similaire à ce que Meritt a publié plus tôt. juste poster le code complet
la source
Si votre contexte le permet (contraintes techniques, etc.), utilisez la
JsonConvert.SerializeObject
méthode de Newtonsoft.Json : cela vous facilitera la vie.la source