Sérialisation d'objets en C# (.NET) : JSON, XML et Binary

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) : JSON, XML et Binary

\n

La 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\n

1. System.Text.Json — sérialisation moderne en JSON

\n

Depuis .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).

\n

Exemple de sérialisation et désérialisation de base

\n
using 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\n

Configuration de la sérialisation avec des attributs

\n

Vous pouvez gérer les noms des propriétés en JSON, ignorer les valeurs null ou utiliser des convertisseurs personnalisés :

\n
using 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\n

2. XmlSerializer — sérialisation en XML

\n

La 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.

\n

Exemple d'utilisation de XmlSerializer

\n
using 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}
\n

Important : 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.

\n\n

3. BinaryFormatter (obsolète, mais mentionné pour l'héritage)

\n

Auparavant, System.Runtime.Serialization.Formatters.Binary.Bi

Recommendations