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;
}
}
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
|