Convertir un dictionnaire en chaîne JSON en C#

Bilal Shahid 12 octobre 2023
  1. La structure de base d’une chaîne JSON
  2. Utilisez JsonConvert.SerializeObject() pour convertir un dictionnaire en JSON en C#
  3. Utiliser une fonction personnalisée pour convertir un dictionnaire en JSON en C#
  4. Utiliser JavaScript Serializer en C# pour les Webapps .NET
Convertir un dictionnaire en chaîne JSON en C#

Alors, comment créer un dictionnaire en C# ? En C#, nous importons d’abord un package comme suit.

using System.Collections.Generic;

Et puis, à l’intérieur de la fonction déclarée MAIN dans la classe, nous déclarons l’objet Dictionary.

IDictionary<int, double> cgpas = new IDictionary<int, dictionary>();

Allons-y maintenant et voyons comment convertir un Dictionary en JSON.

La structure de base d’une chaîne JSON

Qu’est-ce que JSON ? JSON signifie JavaScript Object Notation.

Il utilise une sorte de structure où les valeurs sont mappées à une clé. Donc, si nous voulons stocker un ensemble d’employés dans un magasin, disons, nous pouvons procéder comme suit.

{"employees" : {{"id" : 1 , "name" : "John"}, {"id" : 2, "name" : "Kevin"}}

Maintenant, l’exemple ci-dessus peut être un peu complexe. Mais décomposons-le.

Nous définissons d’abord JSON parce que vous pouvez avoir un aperçu de sa structure et mieux comprendre comment les conversions indiquées plus tard se produisent.

Alors on démarre avec "employees", qui est la KEY. Et puis, on voit une accolade suivie de 2 autres accolades (fermées et ouvertes).

Une enceinte d’accolades peut également être appelée un ensemble. Il contient des clés et des valeurs car nous n’avons défini que 2 employés différents, JOHN et KEVIN ; par conséquent, seuls deux ensembles sont définis.

Ceux-ci sont enfermés dans un ensemble plus grand, la valeur des KEY EMPLOYEES. Ainsi, si nous avons maintenant tendance à appeler la balise employees, nous recevrons cet ensemble comme valeur.

Utilisez JsonConvert.SerializeObject() pour convertir un dictionnaire en JSON en C#

Commençons par ajouter quelques valeurs au dictionnaire CGPA que nous venons d’initialiser il y a quelques temps.

cgpas.Add(1, 3.4);
cgpas.Add(2, 3.13);
cgpas.Add(3, 3.01);

Et si nous voulons obtenir la valeur de, disons, ID 2, nous pouvons appeler une instruction PRINT comme suit.

Console.WriteLine("The CGPA of ID 2 is: " + cgpas[2]);

Ici, le ID est entre crochets, indiquant la KEY. Convertissons maintenant en utilisant l’appel JsonConvert.

string js = JsonConvert.SerializeObject(cgpas);

Avant d’exécuter ce code, assurez-vous d’avoir téléchargé NewtonSoft.JSON. Si ce n’est pas le cas, rendez-vous sur leur site Web ou, si vous travaillez dans Visual Studio, accédez à Nuget Packages et installez NewtonSoft.JSON pour éviter toute erreur.

Maintenant, imprimons la chaîne convertie facilement ici.

Console.WriteLine("The CGPAs are: " + js);

Et la sortie est la suivante.

The CGPAs are: {"1":3.4,"2":3.13,"3":3.01}

Si vous ne trouvez pas la définition SerializeObject, vérifiez si vous l’appelez depuis la classe JsonConvert et non le JsonConverter de System.Text.Json. Vérifiez également l’installation de NewtonSoft.JSON.

Utiliser une fonction personnalisée pour convertir un dictionnaire en JSON en C#

Regardons une autre solution où nous implémentons une fonction qui prend un dictionnaire et le convertit en une chaîne JSON. Il pourra être modifié ultérieurement selon vos besoins, mais allons-y et utilisons-le pour notre IDICTIONARY CGPAS.

static string MyDictionaryToJson(IDictionary<int, double> dict) {
  var x = dict.Select(d => string.Format("\"{0}\": {1}", d.Key, string.Join(",", d.Value)));
  return "{" + string.Join(",", x) + "}";
}

Maintenant, que se passe-t-il ici ? Eh bien, nous passons le dictionnaire en paramètre.

Vous pouvez remarquer que nous avons utilisé IDICTIONNAIRE et non DICTIONNAIRE. IDICTIONARY hérite de DICTIONARY et a quelques extensions plus pratiques, nous avons donc continué.

Cependant, les fonctions de base restent les mêmes. À l’intérieur de la fonction, nous formatons la chaîne en mappant la KEY du DICTIONARY et en utilisant des crochets pour exprimer comment les valeurs doivent être à l’intérieur de la chaîne.

Les crochets autour de {1} mapperont les valeurs simplement sous forme de nombres ou de chaînes. Cependant, si vous avez tendance à le rendre plus expressif et complexe, vous pouvez ajouter des crochets comme ceci : {[1]} et le faire fonctionner.

Cela imprimera les valeurs entre crochets. Le reste renvoie la chaîne dans le formatage approprié.

Maintenant à l’intérieur de la fonction MAIN, faites les mêmes appels.

string js = MyDictionaryToJson(cgpas);

Console.WriteLine("The CGPAs are: " + js);

Production:

The CGPAs are: {"1": 3.4,"2": 3.13,"3": 3.01}

Utiliser JavaScript Serializer en C# pour les Webapps .NET

Supposons que vous utilisiez des applications Web qui utilisent C# comme noyau. Dans ce cas, il vaut mieux suivre une structure LIST pour définir les objets, puis utiliser la fonction JavaScriptSerializer() pour le convertir en chaîne.

Utilisez les espaces de noms définis ci-dessous pour éviter toute erreur de syntaxe lors de la compilation.

using System.Collections.Generic;
using System.Text.Json;

Ensuite, allons-y et créons la liste CGPA.

var cgpas = new List<int, double>();
cgpas.Add(new CGPA() { ID = 1, CGP = 3.4 });
cgpas.Add(new CGPA() { ID = 2, CGP = 3.13 });
cgpas.Add(new CGPA() { ID = 3, CGP = 3.01 });

Bien sûr, il faut aussi définir la classe CGPA à instancier.

public class CGPA {
  public int ID { get; set; }
  public double CGP { get; set; }
}

Et puis, nous pouvons le convertir en une chaîne comme suit.

var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(cgpas);

Vous pouvez imprimer le serializedResult, qui sera la chaîne formatée à partir de la LIST initialisée.

Vous devrez peut-être jouer un peu avec votre code dans les versions Web. Parfois, les versions console ne fonctionneront pas et seront entièrement compatibles.

Par conséquent, assurez-vous que les fonctions, les assemblages et les directives que vous utilisez correspondent à la version que vous exécutez.

Vous pouvez modifier les codes donnés ci-dessus selon votre convenance. Merci pour la lecture!

Auteur: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Article connexe - Csharp Dictionary