Introduction au travail avec JSON en C#
JSON (JavaScript Object Notation) est un format léger d'échange de données largement utilisé dans le développement web, les fichiers de configuration et les API. Si vous commencez à apprendre C# et .NET, savoir travailler avec JSON est une compétence essentielle. Dans cet article, nous allons voir comment effectuer l'analyse JSON (conversion d'une chaîne en objet) et la sérialisation (conversion d'un objet en chaîne JSON) à l'aide des outils intégrés de .NET et de la bibliothèque populaire Newtonsoft.Json.
Nous examinerons des exemples pratiques qui vous aideront à maîtriser rapidement les concepts clés. Tout le code est écrit en C# (.NET 6+), mais fonctionnera également dans des versions antérieures avec des modifications minimes.
1. Travail intégré avec JSON : l'espace de noms System.Text.Json
Depuis .NET Core 3.0, Microsoft a introduit l'espace de noms haute performance System.Text.Json. Il est intégré à la plateforme et ne nécessite pas l'installation de paquets supplémentaires. C'est l'outil principal pour travailler avec JSON dans les applications .NET modernes.
1.1 Sérialisation d'un objet en JSON
La sérialisation est le processus de conversion d'un objet C# en une chaîne JSON. Considérons une classe simple Person :
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
// Utilisationvar person = new Person{ Name = "Ivan Ivanov", Age = 30, Email = "ivan@example.com"};
string json = System.Text.Json.JsonSerializer.Serialize(person);Console.WriteLine(json);Résultat de l'exécution :
{"Name":"Ivan Ivanov","Age":30,"Email":"ivan@example.com"}Par défaut, les propriétés sont sérialisées avec des noms correspondant aux noms des propriétés en C#. Vous pouvez personnaliser le formatage à l'aide de JsonSerializerOptions, par exemple pour rendre le JSON plus lisible :
var options = new System.Text.Json.JsonSerializerOptions{ WriteIndented = true};
string prettyJson = JsonSerializer.Serialize(person, options);Console.WriteLine(prettyJson);Maintenant, la sortie sera avec des indentations :
{ "Name": "Ivan Ivanov", "Age": 30, "Email": "ivan@example.com"}1.2 Dé-sérialisation (analyse) de JSON en objet
Le processus inverse — conversion d'une chaîne JSON en objet C# — s'appelle la dé-sérialisation. Utilisez la méthode JsonSerializer.Deserialize<T>() :
string jsonString = @"{""Name"":""Maria Petrova"",""Age"":25,""Email"":""maria@example.com""}";
Person? person = System.Text.Json.JsonSerializer.Deserialize<Person>(jsonString);
if (person != null){ Console.WriteLine($"Nom : {person.Name}, Âge : {person.Age}");}Important : si le JSON ne correspond pas à la structure de la classe, une exception JsonException sera levée. Pour un travail sécurisé, utilisez la gestion des exceptions ou vérifiez la valeur null.
1.3 Travail avec JsonDocument pour du JSON arbitraire
Parfois, la structure du JSON est inconnue à l'avance ou vous souhaitez lire des données sans créer de classes. Pour cela, utilisez JsonDocument :
string jsonText = @"{""product"":""Ordinateur portable"",""price"":75000,""inStock"":true}";
using JsonDocument doc = JsonDocument.Parse(jsonText);JsonElement root = doc.RootElement;
string product = root.GetProperty("product").GetString();int price = root.GetProperty("price").GetInt32();bool inStock = root.GetProperty("inStock").GetBoolean();
Console.WriteLine($"{product}: {price} roubles (en stock : {inStock})");JsonDocument implémente IDisposable, donc utilisez impérativement using pour libérer les ressources.
2. La bibliothèque classique Newtonsoft.Json (Json.NET)
Avant l'apparition de System.Text.