Convertir une chaîne JSON en objet C#

Fil Zjazel Romaeus Villegas 12 octobre 2023
  1. Convertir une chaîne JSON en objet C# à l’aide de Newtonsoft.Json
  2. Convertir une chaîne JSON en objet C# à l’aide de JavaScriptSerializer
  3. Convertir une chaîne JSON en un exemple de code d’objet C#
Convertir une chaîne JSON en objet C#

Ce didacticiel vous montrera comment convertir une chaîne JSON en objet C# à l’aide de deux méthodes différentes.

Le premier utilise la librairie Newtonsoft.Json, tandis que le second utilise le JavaScriptSerializer. Les deux méthodes sont similaires mais utilisent une syntaxe légèrement différente et nécessitent des références différentes.

Convertir une chaîne JSON en objet C# à l’aide de Newtonsoft.Json

La bibliothèque Newtonsoft.Json est un framework JSON couramment utilisé pour .NET. Cette bibliothèque peut être utilisée après l’installation du package dans votre solution. Vous pouvez utiliser la CLI .NET avec la commande ci-dessous pour installer le package.

> dotnet add package Newtonsoft.Json --version 13.0.1

Une chaîne JSON peut être convertie en n’importe quel type d’objet C# tant qu’il s’agit d’une chaîne JSON valide pour le type d’objet. Cela se fait en désérialisant la chaîne, en la convertissant au type spécifié (T) et en fournissant la chaîne JSON d’entrée.

JsonConvert.DeserializeObject<T>(json_string);

Convertir une chaîne JSON en objet C# à l’aide de JavaScriptSerializer

Une ancienne option pour convertir les chaînes JSON en objets C# est JavaScriptSerializer. Bien qu’elle ne soit pas aussi rapide que la solution Newtonsoft.Json, elle peut toujours être bien utilisée. Pour utiliser cette méthode, vous devez ajouter une référence à System.Web.Extensions.dll à votre projet.

Pour ajouter la référence, suivez les étapes ci-dessous.

  • Accédez à l’explorateur de solutions
  • Clic droit sur Références
  • Cliquez sur Add Reference
  • Cliquez sur l’onglet Assemblies à gauche
  • Trouvez le fichier System.Web.Extensions.dll et cliquez sur OK.

Le JavaScriptSerializer fonctionne de manière similaire à la méthode Newtonsoft.Json en ce sens qu’il ne nécessite que la chaîne JSON et le type à désérialiser.

JavaScriptSerializer().Deserialize<T>(json_string)

Convertir une chaîne JSON en un exemple de code d’objet C#

L’exemple de code ci-dessous montre comment convertir une chaîne JSON en un objet C# de n’importe quel type en utilisant à la fois les fonctions JsonConvert.DeserializeObject<T> et JavaScriptSerializer. Pour cet exemple, nous convertissons des chaînes en un objet liste contenant des entiers (List<Int32>) et en une classe personnalisée que nous avons également spécifiée dans le programme.

using Newtonsoft.Json;
using System.Data;
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace JSON_To_Object_Example {
  class Program {
    static void Main(string[] args) {
      // Declare the JSON Strings
      string list_str = "[1, 2, 3, 9, 8, 7]";
      string custom_class_str =
          "{ \"Name\":\"John Doe\",\"Age\":21,\"Birthday\":\"2000-01-01T00:00:00\"}";

      // ----- Newtonsoft Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_ns = JsonConvert.DeserializeObject<List<Int32>>(list_str);

      // Print the contents of the newly converted List object to the Console.
      Console.WriteLine("Converted List - Newtonsoft: " + String.Join(", ", list_converted_ns) +
                        "\n");

      // The same can be done for any type of C# object, including custom classes. Just change the
      // specified Type.
      Custom_Class class_converted_ns =
          JsonConvert.DeserializeObject<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - Newtonsoft:");
      PrintPropreties(class_converted_ns);

      Console.WriteLine("\n\n");

      // ----- JavaScriptSerializer Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_js = new JavaScriptSerializer().Deserialize<List<Int32>>(list_str);
      Console.WriteLine(
          "Converted List - JavaScriptSerializer: " + String.Join(", ", list_converted_js) + "\n");

      Custom_Class class_converted_js =
          new JavaScriptSerializer().Deserialize<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - JavaScriptSerializer:");
      PrintPropreties(class_converted_js);
      Console.ReadLine();
    }

    public class Custom_Class {
      // Custom Class created for the purposes of this tutorial
      public string Name { get; set; }
      public int Age { get; set; }
      public DateTime Birthday { get; set; }
    }

    public static void PrintPropreties(object obj) {
      // Uses the System.Component Model to read each property of a class and print its value
      foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) {
        string name = descriptor.Name;
        object value = descriptor.GetValue(obj);
        Console.WriteLine("{0}: {1}", name, value);
      }
    }
  }
}

Ce code affichera la liste d’entiers joints par des virgules et toutes les propriétés de la classe personnalisée convertie. Vous pouvez observer que les deux méthodes produiront le même résultat.

Production :

Converted List - Newtonsoft : 1, 2, 3, 9, 8,
    7

        Converted Class -
        Newtonsoft : Name : John Doe Age : 21 Birthday : 01 / 01 /
                            2000 12 : 00 : 00 am

                                Converted List -
        JavaScriptSerializer : 1,
    2, 3, 9, 8,
    7

        Converted Class -
        JavaScriptSerializer : Name : John Doe Age : 21 Birthday : 01 / 01 / 2000 12 : 00 : 00 am

Article connexe - Csharp JSON

Article connexe - Csharp Object