56 votes

Comment convertir un dictionnaire en chaîne JSON en C #?

Je souhaite convertir mon Dictionary<int,List<int>> en chaîne JSON. Est-ce que quelqu'un sait comment y parvenir en C #?

72voto

gilly3 Points 33285

Utiliser Linq:

 string MyDictionaryToJson(Dictionary<int, List<int>> dict)
{
    var entries = dict.Select(d =>
        string.Format("\"{0}\": [{1}]", d.Key, string.Join(",", d.Value)));
    return "{" + string.Join(",", entries) + "}";
}
 

37voto

Jim G. Points 4849

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.

9voto

Stargazer712 Points 8764

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);
 

8voto

Merritt Points 1684
 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]}]
 

8voto

Koveras Points 1169

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: