Participer au site avec un Tip
Rechercher
 

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 :

Sérialisation au format XML

La sérialisation et le mécanisme opposé, la désérialisation, sont des concepts de programmation orientée objet.

Ces mécanismes peuvent notamment servir dans deux cas :

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.

Il est nécessaire d'ajouter le paquet 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);
                }
            }
        }
    }
}
Exemple de sérialisation au format XML
il faut impérativement que vos objets sérialisables exposent un constructeur à zéro paramètre. Il sera utilisé lors de la reconstruction des instances en mémoire. Si vous ne respectez pas cette règle, une exception vous sera renvoyé.

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>
Fichier XML produit par l'exemple de sérialisation présenté ci-dessus.