Travailler avec JSON en C# : analyse et sérialisation en pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction

\n

JSON (JavaScript Object Notation) est un format léger d'échange de données qui est devenu le standard de facto pour les interactions entre serveur et client, ainsi que pour le stockage de configurations. Dans l'écosystème C# (.NET), le travail avec JSON est implémenté au plus haut niveau : le développeur a accès à la fois aux bibliothèques intégrées et à de puissantes solutions tierces. Dans cet article, nous allons voir, à travers des exemples pratiques, comment effectuer l'analyse, la sérialisation et la désérialisation de JSON en C# en utilisant des approches modernes.

\n

Nous examinerons deux outils principaux : System.Text.Json (bibliothèque intégrée depuis .NET Core 3.0+) et Newtonsoft.Json (bibliothèque tierce populaire). Vous apprendrez à convertir des objets C# en JSON et vice versa, à travailler avec des structures imbriquées et à gérer les erreurs.

\n\n

Bases de la sérialisation et de la désérialisation en C#

\n

Avant de plonger dans le code, définissons les termes. La sérialisation est le processus de conversion d'un objet C# (par exemple, une instance de classe) en une chaîne JSON. La désérialisation est le processus inverse : à partir d'une chaîne JSON, nous reconstruisons un objet C#. En C#, on utilise des attributs et des classes de sérialisation spéciales pour cela.

\n\n

1. Travailler avec System.Text.Json (bibliothèque intégrée)

\n

Depuis .NET Core 3.0, Microsoft a présenté sa propre bibliothèque pour travailler avec JSON — System.Text.Json. Elle est plus rapide que Newtonsoft.Json et ne nécessite pas l'installation de paquets supplémentaires.

\n

Considérons une classe simple Person :

\n
public class Person\n{\n    public string Name { get; set; }\n    public int Age { get; set; }\n    public string Email { get; set; }\n}
\n

Sérialisation en JSON :

\n
using System.Text.Json;\n\nvar person = new Person\n{\n    Name = "Alexeï",\n    Age = 30,\n    Email = "alex@example.com"\n};\n\nstring json = JsonSerializer.Serialize(person);\nConsole.WriteLine(json);\n// Sortie : {"Name":"Alexeï","Age":30,"Email":"alex@example.com"}
\n

Désérialisation à partir de JSON :

\n
string jsonString = @"{""Name"":""Maria"",""Age"":25,""Email"":""maria@example.com""}";\nPerson? person = JsonSerializer.Deserialize<Person>(jsonString);\nConsole.WriteLine(person?.Name); // Maria
\n

Notez l'opérateur ? (nullable) — la désérialisation peut retourner null en cas d'erreur.

\n\n

2. Travailler avec Newtonsoft.Json (Json.NET)

\n

Malgré l'apparition de System.Text.Json, Newtonsoft.Json reste un choix populaire grâce à sa flexibilité et ses vastes possibilités de configuration. Pour l'utiliser, installez le paquet NuGet Newtonsoft.Json.

\n

Exemple avec la même classe Person :

\n
using Newtonsoft.Json;\n\n// Sérialisation\nvar person = new Person { Name = "Ivan", Age = 35, Email = "ivan@example.com" };\nstring json = JsonConvert.SerializeObject(person);\nConsole.WriteLine(json);\n\n// Désérialisation\nstring jsonInput = @"{'Name':'Olga','Age':28,'Email':'olga@example.com'}";\nPerson? personDeserialized = JsonConvert.DeserializeObject<Person>(jsonInput);\nConsole.WriteLine(personDeserialized?.Name); // Olga
\n

Newtonsoft.Json prend en charge par défaut à la fois les guillemets doubles et les guillemets simples, ce qui le rend plus tolérant au JSON "sale".

\n\n

Scénarios avancés : travailler avec des objets imbriqués et des collections

\n

Dans les projets réels, le JSON est rarement plat. Considérons un exemple avec des données imbriquées.

\n

Supposons que nous ayons une classe Company contenant une liste d'employés :

\n
public class Employee\n{\n    public string Name { get; set; }\n    public string Position { get; set; }\n}\n\npublic class Company\n{\n    public string CompanyName { get; set; }\n    public List<Employee> Employees { get; set; }\n}
\n

Sérialisation (System.Text.Json) :

\n


                
                

Blogs

Book Recommendations