Traitement JSON en C# (.NET) : guide complet
JSON (JavaScript Object Notation) est un format léger d'échange de données, largement utilisé dans les applications web, les API et les fichiers de configuration. Dans l'écosystème C# (.NET), il existe deux approches principales pour travailler avec 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 versions ultérieures. Dans cet article, nous allons détailler les deux outils, leurs fonctionnalités, leur syntaxe et les meilleures pratiques.
1. Newtonsoft.Json (Json.NET)
La bibliothèque Newtonsoft.Json a longtemps été la norme de facto pour travailler avec JSON en C#. Elle fournit une API riche, la prise en charge de LINQ to JSON, une configuration flexible de la sérialisation et de la désérialisation. Elle peut être installée via NuGet :
Install-Package Newtonsoft.Json1.1. Sérialisation et désérialisation
Les opérations les plus basiques sont la conversion d'un objet en JSON et vice versa. Considérons la classe Person :
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}Sérialisation (objet → JSON) :
var person = new Person { Name = "Иван", Age = 30, Email = "ivan@example.com" };string json = JsonConvert.SerializeObject(person, Formatting.Indented);Console.WriteLine(json);Désérialisation (JSON → objet) :
string json = @"{""Name"":""Мария"",""Age"":25,""Email"":""maria@example.com""}";Person person = JsonConvert.DeserializeObject<Person>(json);Console.WriteLine(person.Name); // Мария1.2. Travail avec JObject et JArray
La bibliothèque Newtonsoft.Json prend en charge LINQ to JSON, ce qui permet d'accéder dynamiquement aux éléments JSON sans créer de classes fortement typées.
string json = @"{""products"":[{""id"":1,""name"":""Ноутбук""},{""id"":2,""name"":""Мышь""}]}";JObject obj = JObject.Parse(json);JArray products = (JArray)obj["products"];
foreach (var product in products){ int id = (int)product["id"]; string name = (string)product["name"]; Console.WriteLine($"ID: {id}, Name: {name}");}1.3. Attributs pour la configuration de la sérialisation
À l'aide d'attributs, vous pouvez contrôler les noms des propriétés dans le JSON, ignorer des champs, définir des valeurs par défaut et bien plus encore.
public class User{ [JsonProperty("user_name")] public string Name { get; set; }
[JsonIgnore] public string Password { get; set; }
[JsonProperty("registration_date")] public DateTime CreatedAt { get; set; }}
// Lors de la sérialisation, Password sera ignoré et Name deviendra "user_name"string json = JsonConvert.SerializeObject(user);2. System.Text.Json (bibliothèque intégrée .NET)
À partir de .NET Core 3.0, Microsoft a introduit sa propre bibliothèque System.Text.Json, optimisée pour les performances et une consommation mémoire minimale. Elle ne nécessite pas l'installation de paquets supplémentaires (à l'exception de certaines extensions).
2.1. Sérialisation et désérialisation
Le travail avec System.Text.Json est similaire à Newtonsoft.Json, mais présente quelques différences de syntaxe et de comportement par défaut (par exemple, la sensibilité à la casse).
using System.Text.Json;
var person = new Person { Name = "Алексей", Age = 28, Email = "alex@example.com" };string json = JsonSerializer.Serialize(person, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);
// Désérialisationstring jsonInput = @"{""Name"":""Ольга"",""Age"":32,""Email"":""olga@example.com""}";Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonInput);Important ! Par défaut, System.Text.Json est
Aussi dans la bibliothèque
gRPC pour Swift (iOS/macOS) : bibliothèques, configuration et exemples de code
Travailler avec XML en PHP : analyse, création et traitement des données
gRPC en Rust : bibliothèques Tonic et Grpc-rs avec exemples
ts-node-dev TypeScript : guide complet avec exemples