Introduction
\nJSON (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.
\nNous 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\nBases de la sérialisation et de la désérialisation en C#
\nAvant 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\n1. Travailler avec System.Text.Json (bibliothèque intégrée)
\nDepuis .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.
Considérons une classe simple Person :
public class Person\n{\n public string Name { get; set; }\n public int Age { get; set; }\n public string Email { get; set; }\n}\nSérialisation en JSON :
\nusing 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"}\nDésérialisation à partir de JSON :
\nstring jsonString = @"{""Name"":""Maria"",""Age"":25,""Email"":""maria@example.com""}";\nPerson? person = JsonSerializer.Deserialize<Person>(jsonString);\nConsole.WriteLine(person?.Name); // Maria\nNotez l'opérateur ? (nullable) — la désérialisation peut retourner null en cas d'erreur.
2. Travailler avec Newtonsoft.Json (Json.NET)
\nMalgré 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.
Exemple avec la même classe Person :
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\nNewtonsoft.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\nScénarios avancés : travailler avec des objets imbriqués et des collections
\nDans les projets réels, le JSON est rarement plat. Considérons un exemple avec des données imbriquées.
\nSupposons que nous ayons une classe Company contenant une liste d'employés :
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}\nSérialisation (System.Text.Json) :
\n
Blogs
Book Recommendations
Lire aussi
Tests en Swift : unitaires, d'intégration, e2e — niveau avancé
Comment lire et écrire des fichiers en Go : vitesse et optimisation
Programmation asynchrone en Go : guide complet avec exemples
Chaînes multilignes en JavaScript : 3 méthodes qui simplifieront la vie
Comment obtenir une nouvelle valeur d'un select dans Angular 2 en 2025 : meilleures pratiques