TUTORIELS 
La sérialisation dans C#

Page 1 | 2

Présentation des deux manières de sérialiser un objet au sein du framework .NET, avec C#.
 (20 novembre 2003)
 
Il y a quelques mois, nous avons publié un article sur l'utilisation de la sérialisation dans Java. Il est temps d'étudier l'équivalent au sein du langage "concurrent" et pierre d'angle de .NET, C#.

Présentation
Pour nos lecteurs qui ne connaissent pas ce mot, la sérialisation (en anglais serialization) est un procédé qui consiste à sauver l'état d'un objet sur le disque ou le réseau plutôt que de le garder en mémoire. On peut dire que l'objet est "aplatit" pour pouvoir le convertir en un flux de données, que l'on peut transmettre à un autre objet via la désérialisation. Ce mécanisme se montre nécessaire dès que les objets doivent être accessibles à partir d'un environnement étranger (service Web, par exemple) : un objet peut ainsi exister entre deux programmes, ou deux exécutions d'un programme (c'est la persistance objet).

Les possibilités de .NET
.NET propose plusieurs moyens de sérialiser ses objets, permettant soit de travailler simplement, soit de contrôler parfaitement ce qui est effectivement sérialisé.

Méthode simple
En utilisant les attributs personnalisés [Serializable] et [NonSerialized], C# opère une sérialisation qui devrait suffire dans la plupart des cas. Voici notre objet à sérialisé :

using System;

[Serializable]
public class Animal
  {
  public string Genre;
  public string Espece;
  public string Race;
  public bool int nbrMembres;

 
 public void ClassificationAnimal()
    {
    Console.WriteLine("{0} / {1} / {2}.", Genre, Espace, Race);
    }

  [NonSerialized]
  
public void NombreDeMembres()
    {
    Console.WriteLine("Cette race compte {0} membres.", nbrMembres);
    }
  }

Parce qu'elle est déclarée [NonSerialized], la méthode NombreDeMembres() ne "persiste" pas.

Voici les fonctions de sérialisation et de désérialisation :

using System;
using System IO;
using System.Runtime.Serialization.Formatters.Soap;

public class OutilsSerialisation
  {
  public static void Serialisation(string nomDuFichier, Object o);
    {
    FileStream fs = new FileStream(nomDuFichier, FileMode.create)
    SoapFormatter sf = new SoapFormatter;
    sf.Serialize(fs, o)
    fs.Close();
    }

  public static Object Deserialisation (string nomDuFichier)
    {
    FileStream fs = new FileStream(nomDuFichier, FileMode.Open);
    SoapFormatter sf = now SoapFormatter;
    Object o = sf.Deserialize(fs);
    fs.Close();
    return o;
    }
  }

Discutez en sur les forums

On (dé)sérialise ensuite une occurrence comme suit :

Animal Ornithorynque = new Animal();
Ornithorynque.Genre = "Mamifère";
Ornithorynque.Espece = "Monotrème";
Ornithorynque.Race = "";
Ornithorynque.nbrMembres = 65536;
OutilsSerialisation.Serialisation("Toto.soap", Ornithorynque);

Animal JeNeSaisPas = new OutilsSerialisation.Deserialisation("Toto.soap");

Page 1 | 2

 
[ Xavier BorderieJDNet]
 
Accueil | Haut de page