Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. C# 12
  3. Sérialisation
Extrait - C# 12 Développez des applications Windows avec Visual Studio 2022
Extraits du livre
C# 12 Développez des applications Windows avec Visual Studio 2022
1 avis
Revenir à la page d'achat du livre

Sérialisation

Introduction

La sérialisation est le nom du processus qui permet de convertir un objet en un flux. Il est alors possible de l’enregistrer dans un fichier ou de le transmettre à une autre application. La récupération de ce flux et sa transformation en objet sont appelées la désérialisation.

Le Framework .NET met à disposition deux techniques :

  • La sérialisation binaire permet de créer une copie exacte de l’objet sérialisé. Toutes les propriétés publiques, privées, sa classe ou encore son assemblage sont transformés en un flux de données.

  • La sérialisation XML crée une représentation des propriétés et des champs publics uniquement. L’avantage est que cela permet une communication plus aisée entre des applications hétérogènes. La sérialisation SOAP qui est une variante est largement utilisée notamment pour les services web.

La sérialisation binaire

La meilleure raison d’utiliser la sérialisation binaire est de rendre persistant l’état d’un objet afin de pouvoir le recréer à l’identique ultérieurement. Cet objet peut alors être stocké dans un fichier ou envoyé en tant que flux à travers le réseau. Un autre avantage est que la sérialisation binaire conserve l’état des membres publics et privés de l’objet.

A contrario, il n’est pas aisé d’utiliser les flux générés dans ou depuis une application tierce.

1. Les bases

Le prérequis pour rendre une classe sérialisable est de la marquer avec l’attribut Serializable. Tenter de sérialiser un objet qui ne serait pas marqué de cet attribut entraînerait la levée d’une exception de type SerializationException :

[Serializable] 
public class ReplacedField 
{ 
    public string Pattern; 
    public string Field; 
    public bool HasChanged; 
} 

L’exemple de code ci-dessous montre la méthode permettant à un objet de cette classe d’être sérialisé dans un fichier :

// Instanciation et initialisation de l'objet 
ReplacedField O = new ReplacedField(); 
O.Field = "myField"; 
O.Pattern = "myPattern"; 
O.HasChanged = true; 
 
// Création du formateur binaire 
IFormatter formatter = new BinaryFormatter(); 
 
// Création du flux 
Stream stream = new FileStream(@"C:\ReplacedField.bin",  
FileMode.Create); 
 
// Sérialisation de l'objet dans le flux 
formatter.Serialize(stream, O); 
stream.Close(); 
stream.Dispose(); 

La sérialisation utilise un formateur binaire du type BinaryFormatter de l’espace de noms System.Runtime.Serialization.Formatters.Binary. Pour effectuer la transformation, il suffit d’appeler la méthode Serialize de cet objet en passant en paramètres le flux dans lequel écrire les données et l’objet à sérialiser.

La désérialisation suit le même schéma et utilise également un formateur binaire pour lequel il faut appeler la méthode...

La sérialisation XML

Le processus de sérialisation XML ne s’occupe que des champs publics, sans information sur les types, les champs privés ou les propriétés en lecture seule. Le principal avantage de la sérialisation XML est sa flexibilité au niveau du flux créé. Il permet de transporter facilement des données d’une application à une autre.

1. Les bases

Les processus de sérialisation et désérialisation XML suivent les mêmes principes que la sérialisation binaire à l’exception près que la classe n’a pas besoin d’être marquée par l’attribut Serializable :

public class ReplacedField 
{ 
    public string Pattern; 
    public string Field; 
    public bool HasChanged; 
} 

La classe XmlSerializer de l’espace de noms System.Xml.Serialization est utilisée pour effectuer les transformations :

// Instanciation et initialisation de l'objet 
ReplacedField O = new ReplacedField(); 
O.Field = "myField"; 
O.Pattern = "myPattern"; 
O.HasChanged = true; 
 
// Création du sérialiseur XML 
XmlSerializer serializer = new  
XmlSerializer(typeof(ReplacedField)); 
 
// Création du flux 
Stream stream = new FileStream(@"C:\ReplacedField.xml",  
FileMode.Create); 
 
// Sérialisation de l'objet dans le flux 
serializer.Serialize(stream, O); 
stream.Close(); 

L’objet XmlSerializer prend en paramètre le type de l’objet à sérialiser. L’appel de la méthode Serialize de l’objet, en passant en paramètres le flux dans lequel écrire les données et l’objet à sérialiser, effectue la transformation.

Le résultat de la sérialisation précédente est le suivant :

<?xml version="1.0"?> 
<ReplacedField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  <Pattern>myPattern</Pattern> 
  <Field>myField</Field> 
  <HasChanged>true</HasChanged> 
</ReplacedField> 

L’élément...