La sérialisation et le mécanisme opposé, la désérialisation, sont des concepts de programmation orientée objet.
La sérialisation consiste à transformer un ou plusieurs objets (une grappe d'objets en mémoire) en un flux séquentiel d'octets.
La désérialisation est le processus inverse, qui transforme un flux d'octets en objets.
Ces mécanismes peuvent notamment servir dans deux cas :
La communication dans un système distribué. Par exemple, un client et un serveur vont pouvoir s'échanger des objets pour communiquer.
La persistance de données. Par exemple, un programme va enregistrer son état actuel (maintenu dans des objets) dans un fichier. Ultérieurement, il pourra relire ces objets et restaurer son état.
Vous pouvez opter pour plusieurs formats de sérialisation : XML (eXtensible Markup Language), JSON (JavaScript Object Notation), Format binaire...
C# supporte un grand nombre de formats. Nous allons tester une sérialisation XML en utilisant le paquet additionnel System.Xml.XmlSerializer
.
System.Xml.XmlSerializer
avec le gestionnaire NuGet,
car il n'est pas livré de base avec votre environnement .NET.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.Serialization; namespace Serialisation { public class Rational { public Rational() : this(0, 1) { } // Constructeur obligatoire public Rational(int num, int den) { this.Numerator = num; this.Denominator = den; } public int Numerator { get; set; } public int Denominator { get; set; } } class Program { static void Main(string[] args) { // --- Les données à sérialiser et désérialiser --- var rationals = new List<Rational> { new Rational(10, 7), new Rational(2, 3), new Rational(7, 4) }; // --- Sérialisation de la collection de rationnels --- var settings = new XmlWriterSettings { Indent = true, NewLineHandling = NewLineHandling.None }; var serializer = new XmlSerializer(typeof(List<Rational>)); using (var outputStream = new FileStream("rationals.txt", FileMode.Create)) using (var xmlWriter = XmlWriter.Create(outputStream, settings)) { serializer.Serialize(xmlWriter, rationals); xmlWriter.Flush(); } // --- Désérialisation de la collection de rationnels --- using (var inputStream = new FileStream("rationals.txt", FileMode.Open)) using (var xmlReader = XmlReader.Create(inputStream)) { var list = serializer.Deserialize(xmlReader) as List<Rational>; foreach(var rational in list) { Console.WriteLine(rational); } } } } } |
Et voici le contenu du fichier XML produit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?xml version="1.0" encoding="utf-8"?> <ArrayOfRational xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Rational> <Numerator>10</Numerator> <Denominator>7</Denominator> </Rational> <Rational> <Numerator>2</Numerator> <Denominator>3</Denominator> </Rational> <Rational> <Numerator>7</Numerator> <Denominator>4</Denominator> </Rational> </ArrayOfRational> |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :