Introduction au travail avec JSON en C#
\n\nJSON (JavaScript Object Notation) est un format léger d'échange de données largement utilisé dans le développement web, les applications mobiles et les microservices. Pour un développeur C#, savoir travailler avec JSON est une compétence essentielle. Dans cet article, nous aborderons les bases de l'analyse (désérialisation) et de la sérialisation JSON en utilisant l'espace de noms moderne System.Text.Json, qui fait partie de .NET Core 3.0 et versions ultérieures, ainsi que .NET 5/6/7/8.
Nous verrons :
\n- \n
- Ce que sont la sérialisation et la désérialisation \n
- Comment convertir un objet C# en chaîne JSON \n
- Comment lire du JSON et le retransformer en objet \n
- Le travail avec des objets imbriqués et des collections \n
- La gestion des erreurs et la configuration de la sérialisation \n
Tous les exemples de code sont écrits pour une application console C# (.NET 6+). Vous pourrez les copier et les exécuter immédiatement.
\n\n1. Bases de la sérialisation : objet → JSON
\n\nLa sérialisation est le processus de conversion d'un objet (ou d'une structure de données) en une chaîne au format JSON. En C#, on utilise la classe JsonSerializer de l'espace de noms System.Text.Json.
Création d'un modèle simple
\n\nSupposons que nous ayons une classe Person :
public class Person\n{\n public string Name { get; set; }\n public int Age { get; set; }\n public string Email { get; set; }\n}\n\nSérialisation d'un objet
\n\nCréons maintenant une instance et convertissons-la en JSON :
\n\nusing System.Text.Json;\n\nPerson person = new Person\n{\n Name = "Иван Петров",\n Age = 30,\n Email = "ivan@example.com"\n};\n\nstring jsonString = JsonSerializer.Serialize(person);\nConsole.WriteLine(jsonString);\n\nRésultat :
\n\n{"Name":"Иван Петров","Age":30,"Email":"ivan@example.com"}\n\nPar défaut, JsonSerializer utilise le camelCase pour les noms de propriétés (première lettre en minuscule), mais dans notre exemple, les noms restent en majuscule car nous n'avons pas modifié les paramètres. Si vous avez besoin d'un camelCase strict, utilisez JsonSerializerOptions :
var options = new JsonSerializerOptions\n{\n PropertyNamingPolicy = JsonNamingPolicy.CamelCase\n};\nstring jsonCamelCase = JsonSerializer.Serialize(person, options);\nConsole.WriteLine(jsonCamelCase);\n// {"name":"Иван Петров","age":30,"email":"ivan@example.com"}\n\n2. Désérialisation : JSON → objet
\n\nLa désérialisation est le processus inverse : on prend une chaîne JSON et on la transforme en objet C#.
\n\nExemple simple de désérialisation
\n\nSupposons que nous ayons reçu du JSON d'une API :
\n\nstring jsonFromApi = @"{""Name"":""Анна Смирнова"",""Age"":25,""Email"":""anna@test.com""}";\n\nPerson? personFromJson = JsonSerializer.Deserialize<Person>(jsonFromApi);\n\nif (personFromJson != null)\n{\n Console.WriteLine($"Nom : {personFromJson.Name}, Âge : {personFromJson.Age}");\n}\n\nNotez le signe ? après le type Person — c'est une annotation nullable indiquant que le résultat peut être null (par exemple, si le JSON est incorrect).
Travail avec les tableaux et les listes
\n\nLe JSON contient souvent des collections d'objets. Supposons que nous ayons un tableau d'utilisateurs :
\n\nstring jsonArray = @"\n[\n {""Name"":""Олег"",""Age"":35},\n {""Name"":""Мария"",""Age"":28},\n {""Name"":""Дмитрий"",""Age"":42}\n]";\n\nList<Person>? people = JsonSerializer.Deserialize<List<Person>>(jsonArray);\n\nif (people != null)\n{\n foreach (var p in people)\n {\n Console.WriteLine($"{p.Name} - {p.Age} ans");\n }\n}\n\n3. Travail avec des objets imbriqués et des structures complexes
\n\nLes données JSON réelles sont rarement plates. Considérons