Je souhaite convertir mon Dictionary<int,List<int>>
en chaîne JSON. Est-ce que quelqu'un sait comment y parvenir en C #?
Réponses
Trop de publicités?Cette réponse mentionne Json.NET mais ne vous explique pas comment utiliser Json.NET pour sérialiser un dictionnaire:
return JsonConvert.SerializeObject( myDictionary );
Contrairement à JavaScriptSerializer, myDictionary
ne doit pas nécessairement être un dictionnaire de type <string, string>
pour que JsonConvert fonctionne.
Json.NET probablement sérialise C# dictionnaires de manière adéquate maintenant, mais lorsque l'OP posté cette question, de nombreux MVC développeurs peuvent avoir été à l'aide de la JavaScriptSerializer classe parce que c'est l'option par défaut de la boîte.
Si vous travaillez sur un projet de l'héritage (MVC 1 ou MVC 2), et vous ne pouvez pas utiliser Json.NET, je vous recommande d'utiliser un List<KeyValuePair<K,V>>
au lieu de Dictionary<K,V>>
. L'héritage JavaScriptSerializer classe va sérialiser ce type, mais il va avoir des problèmes avec un dictionnaire.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<int, List<int>> foo = new Dictionary<int, List<int>>();
foo.Add(1, new List<int>( new int[] { 1, 2, 3, 4 }));
foo.Add(2, new List<int>(new int[] { 2, 3, 4, 1 }));
foo.Add(3, new List<int>(new int[] { 3, 4, 1, 2 }));
foo.Add(4, new List<int>(new int[] { 4, 1, 2, 3 }));
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Dictionary<int, List<int>>));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, foo);
Console.WriteLine(Encoding.Default.GetString(ms.ToArray()));
}
}
}
}
Cela va écrire sur la console:
[{\"Key\":1,\"Value\":[1,2,3,4]},{\"Key\":2,\"Value\":[2,3,4,1]},{\"Key\":3,\"Value\":[3,4,1,2]},{\"Key\":4,\"Value\":[4,1,2,3]}]
Désolé si la syntaxe est la plus petite, mais le code dont je tire ce code était à l'origine en VB :)
using System.Web.Script.Serialization;
...
Dictionary<int,List<int>> MyObj = new Dictionary<int,List<int>>();
//Populate it here...
string myJsonString = (new JavaScriptSerializer()).Serialize(MyObj);