Introduction au travail avec JSON en C#
JSON (JavaScript Object Notation) est un format léger d'échange de données largement utilisé dans les applications web modernes, les API et les fichiers de configuration. Pour un développeur C#, savoir travailler avec JSON est une compétence obligatoire, en particulier lors de la création de clients REST, de microservices ou d'applications interagissant avec des sources de données externes.
Dans l'écosystème .NET, il existe deux approches principales pour le traitement du JSON : la bibliothèque classique Newtonsoft.Json (également connue sous le nom de Json.NET) et la bibliothèque moderne intégrée System.Text.Json, apparue dans .NET Core 3.0 et devenue le standard dans .NET 5+. Les deux bibliothèques permettent d'effectuer deux opérations clés : la sérialisation (conversion d'un objet C# en chaîne JSON) et la désérialisation (conversion d'une chaîne JSON en objet C#).
Dans cet article, nous allons détailler les deux approches, apprendre à analyser des structures de données complexes et examiner les meilleures pratiques pour travailler avec JSON en C#.
1. Opérations de base : sérialisation et désérialisation
1.1 Utilisation de Newtonsoft.Json (Json.NET)
Newtonsoft.Json est la norme de facto pour travailler avec JSON dans .NET depuis de nombreuses années. Pour commencer, installez le package via NuGet :
Install-Package Newtonsoft.JsonConsidérons une classe simple pour l'exemple :
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public bool IsActive { get; set; }}Sérialisation d'un objet en JSON :
using Newtonsoft.Json;
User user = new User{ Id = 1, Name = "Иван Петров", Email = "ivan@example.com", IsActive = true};
string json = JsonConvert.SerializeObject(user, Formatting.Indented);Console.WriteLine(json);Résultat de l'exécution :
{ "Id": 1, "Name": "Иван Петров", "Email": "ivan@example.com", "IsActive": true}Désérialisation du JSON en objet :
string jsonString = @"{""Id"":1,""Name"":""Иван Петров"",""Email"":""ivan@example.com"",""IsActive"":true}";User deserializedUser = JsonConvert.DeserializeObject<User>(jsonString);Console.WriteLine($"Utilisateur : {deserializedUser.Name}, Email : {deserializedUser.Email}");1.2 Utilisation de System.Text.Json
À partir de .NET Core 3.0, Microsoft a introduit sa propre bibliothèque System.Text.Json, optimisée en termes de performances et ne nécessitant pas de dépendances externes.
Sérialisation :
using System.Text.Json;
User user = new User{ Id = 2, Name = "Мария Смирнова", Email = "maria@example.com", IsActive = false};
string json = JsonSerializer.Serialize(user, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);Désérialisation :
string jsonString = @"{""Id"":2,""Name"":""Мария Смирнова"",""Email"":""maria@example.com"",""IsActive"":false}";User deserializedUser = JsonSerializer.Deserialize<User>(jsonString);Console.WriteLine($"Utilisateur : {deserializedUser.Name}");2. Travail avec des structures de données complexes
2.1 Objets imbriqués et collections
Le JSON contient souvent des structures imbriquées. Considérons un exemple avec un tableau de commandes d'un utilisateur :
public class Order{ public int OrderId { get; set; } public decimal Amount { get; set; } public List<string> Items { get; set; }}
public class Customer{ public int CustomerId { get; set; } public string FullName { get; set; } public List<Order> Orders { get; set; }}Désérialisation d'un JSON complexe