Sérialisation d'objets en C# (.NET) : JSON, XML et Binary
\nLa sérialisation est le processus de conversion d'un objet complexe (ou d'un graphe d'objets) en un flux d'octets ou un format textuel (JSON, XML). Cela est nécessaire pour sauvegarder l'état d'un objet dans un fichier, transmettre des données sur un réseau (REST API, gRPC) ou pour la mise en cache. Le processus inverse — la désérialisation — restaure l'objet à partir de sa représentation sérialisée. Dans l'écosystème .NET (y compris .NET Core et .NET 5/6/7/8), il existe plusieurs mécanismes de sérialisation intégrés.
\n\n1. System.Text.Json — sérialisation moderne en JSON
\nDepuis .NET Core 3.0, Microsoft recommande d'utiliser System.Text.Json comme méthode principale pour travailler avec JSON. La bibliothèque est légère, hautes performances et ne nécessite pas de dépendances tierces (contrairement à Newtonsoft.Json).
Exemple de sérialisation et désérialisation de base
\nusing System;\nusing System.Text.Json;\n\npublic class Person\n{\n public string Name { get; set; }\n public int Age { get; set; }\n public List<string> Hobbies { get; set; }\n}\n\nclass Program\n{\n static void Main()\n {\n var person = new Person\n {\n Name = "Alexeï",\n Age = 30,\n Hobbies = new List<string> { "Lecture", "Programmation" }\n };\n\n // Sérialisation\n string json = JsonSerializer.Serialize(person);\n Console.WriteLine(json);\n // {"Name":"Alexeï","Age":30,"Hobbies":["Lecture","Programmation"]}\n\n // Désérialisation\n Person restored = JsonSerializer.Deserialize<Person>(json);\n Console.WriteLine(restored.Name); // Alexeï\n }\n}\n\nConfiguration de la sérialisation avec des attributs
\nVous pouvez gérer les noms des propriétés en JSON, ignorer les valeurs null ou utiliser des convertisseurs personnalisés :
\nusing System.Text.Json.Serialization;\n\npublic class Product\n{\n [JsonPropertyName("product_id")]\n public int Id { get; set; }\n\n [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n public string? Description { get; set; }\n\n [JsonConverter(typeof(JsonStringEnumConverter))]\n public Status Status { get; set; }\n}\n\npublic enum Status { Active, Inactive }\n\n2. XmlSerializer — sérialisation en XML
\nLa classe XmlSerializer (espace de noms System.Xml.Serialization) est disponible dans toutes les versions de .NET et est idéale pour la compatibilité avec les systèmes hérités ou les fichiers de configuration XML.
Exemple d'utilisation de XmlSerializer
\nusing System;\nusing System.IO;\nusing System.Xml.Serialization;\n\n[XmlRoot("Employee")]\npublic class Employee\n{\n [XmlElement("FullName")]\n public string Name { get; set; }\n\n [XmlAttribute("id")]\n public int Id { get; set; }\n\n [XmlArray("Projects")]\n [XmlArrayItem("Project")]\n public List<string> Projects { get; set; }\n}\n\nclass Program\n{\n static void Main()\n {\n var emp = new Employee\n {\n Id = 101,\n Name = "Maria Ivanova",\n Projects = new List<string> { "Alpha", "Beta" }\n };\n\n var serializer = new XmlSerializer(typeof(Employee));\n using (var writer = new StreamWriter("employee.xml"))\n {\n serializer.Serialize(writer, emp);\n }\n\n // Désérialisation\n using (var reader = new StreamReader("employee.xml"))\n {\n Employee restored = (Employee)serializer.Deserialize(reader);\n Console.WriteLine(restored.Name); // Maria Ivanova\n }\n }\n}\nImportant : XmlSerializer nécessite que la classe ait un constructeur public sans paramètres, et que les propriétés sérialisables soient publiques et aient des setters.
3. BinaryFormatter (obsolète, mais mentionné pour l'héritage)
\nAuparavant, System.Runtime.Serialization.Formatters.Binary.Bi
Aussi dans la bibliothèque
Client OAuth pour JavaScript (Node.js) : aperçu et exemples d'utilisation
Travailler avec YAML en Kotlin : bibliothèques, exemples et parsing
Clap pour Rust : guide complet avec exemples
Test en PHP : aperçu des frameworks et outils (PHPUnit, Pest, Codeception)