Sérialisation d'objets en C# (.NET) : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Sérialisation d'objets en C# (.NET) : des bases aux techniques avancées



La sérialisation est le processus de conversion d'objets complexes (classes, structures) en un format pouvant être sauvegardé dans un fichier, transmis sur un réseau ou écrit dans une base de données. Le processus inverse (restauration d'un objet à partir d'un flux de données) est appelé désérialisation. Dans la plateforme .NET, il existe plusieurs outils intégrés et tiers pour la sérialisation, chacun avec ses propres caractéristiques, performances et domaines d'application.



Dans cet article, nous aborderons les principales méthodes de sérialisation en C# : JSON (System.Text.Json et Newtonsoft.Json), XML (XmlSerializer), la sérialisation binaire (BinaryFormatter — obsolète mais encore rencontré) et Protocol Buffers (protobuf-net) pour les scénarios à hautes performances.



1. Sérialisation en JSON avec System.Text.Json



Depuis .NET Core 3.0, Microsoft recommande d'utiliser l'espace de noms System.Text.Json pour travailler avec JSON. Il s'agit d'une API rapide, de bas niveau et asynchrone.



Exemple de sérialisation et désérialisation :



using System;using System.Text.Json;

public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}

class Program{ static void Main() { var person = new Person { Name = "Иван Петров", Age = 30, Email = "ivan@example.com" };

// Sérialisation en chaîne JSON string jsonString = JsonSerializer.Serialize(person); Console.WriteLine(jsonString); // Sortie : {"Name":"Иван Петров","Age":30,"Email":"ivan@example.com"}

// Désérialisation depuis JSON string jsonInput = @"{""Name"":""Мария"",""Age"":25,""Email"":""maria@test.ru""}"; Person restoredPerson = JsonSerializer.Deserialize<Person>(jsonInput); Console.WriteLine($"Nom : {restoredPerson.Name}, Âge : {restoredPerson.Age}"); }}


Configuration de la sérialisation :

  • Ignorer les propriétés null : JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }
  • Formatage (pretty print) : JsonSerializerOptions { WriteIndented = true }
  • Gestion des références cycliques : ReferenceHandler.Preserve


2. Newtonsoft.Json (Json.NET) — le classique



Avant l'arrivée de System.Text.Json, la bibliothèque Newtonsoft.Json (installée via NuGet) était la norme de facto. Elle prend en charge davantage de scénarios : objets dynamiques, attributs, convertisseurs et paramètres flexibles.



using Newtonsoft.Json;

public class Order{ public int Id { get; set; } public decimal Amount { get; set; } [JsonIgnore] public string InternalNote { get; set; } // Ce champ ne sera pas sérialisé}

var order = new Order { Id = 1, Amount = 99.99m, InternalNote = "Секретно" };string json = JsonConvert.SerializeObject(order, Formatting.Indented);Console.WriteLine(json);// {// "Id": 1,// "Amount": 99.99// }

var deserialized = JsonConvert.DeserializeObject<Order>(json);


3. Sérialisation en XML (XmlSerializer)



Pour le format XML dans .NET, on utilise la classe XmlSerializer. Elle convient bien pour la compatibilité avec les systèmes hérités et les services SOAP.



using System;using System.IO;using System.Xml.Serialization;

[Serializable]public class Product{ [XmlAttribute] public int Id { get; set; } [XmlElement("ProductName")] public string Name { get; set; }}

class Program{ static void Main() { var product = new Product { Id = 42, Name = "Ноутбук" };

// Sérialisation

Recommendations