|
|
|
|
Chapitre 38 : S<>rialisation
|
|
|
|
|
|
|
|
|
|
La s<>rialisation consiste <20> transformer un objet ou un ensemble d'objets qui se r<>f<EFBFBD>rent les uns aux autres en un flux de bytes ou XML.
|
|
|
|
|
L'objectif est de pouvoir conserver ces donn<6E>es ou de les transmettre.
|
|
|
|
|
La d<>s<EFBFBD>rialisation fonctionne dans le sens inverse : elle permet de transformer un flux de bytes ou des donn<6E>es XML en un objet ou graphe d'objets en m<>moire.
|
|
|
|
|
|
|
|
|
|
La s<>rialisation et la d<>s<EFBFBD>rialisation sont utilis<69>es pour :
|
|
|
|
|
- transmettre des objets sur le r<>seau ou en dehors des limites de l'application,
|
|
|
|
|
- stocker et persister des objets dans des fichies ou des bases de donn<6E>es.
|
|
|
|
|
(plus rarement) - cloner des objets.
|
|
|
|
|
|
|
|
|
|
Dans le framework .NET, il y a 4 m<>canismes de s<>rialisation/d<>s<EFBFBD>rialisation :
|
|
|
|
|
-1- le Data Contract Serializer,
|
|
|
|
|
-2- le s<>rialiseur binaire (uniquement pour les applications bureau),
|
|
|
|
|
-3- le s<>rialiseur XML
|
|
|
|
|
-4- l'interface IXmlSerializable.
|
|
|
|
|
|
|
|
|
|
Les 3 premiers permettent de s<>rialiser/d<>s<EFBFBD>rialiser. Le dernier vous guide <20> travers l'<27>criture de votre propre s<>rialiseur/d<>s<EFBFBD>rialiseur.
|
|
|
|
|
Microsoft a d'abord cr<63><72> les 2 et 3 pour respectivement permettre (2) la s<>rialisation de graphes d'objets tout en pr<70>servant les r<>f<EFBFBD>rences et (3) permettre l'interop<6F>rabilit<69>
|
|
|
|
|
avec XML et SOAP dans l'envoi de messages standards.
|
|
|
|
|
Puis la cr<63>ation de WCF (Windows Communication Foundation) dans la version 3.0 du Framework .NET a conduit Microsoft <20> unifier ces deux s<>rialiseurs, d'o<> la naissance du (1) data contract
|
|
|
|
|
serializer. Ce dernier est plus simple d'utilisation et couvre les m<>mes besoins que les deux autres, m<>me s'il est un peu moins performant que le (2) pour la s<>rialisation binaire,
|
|
|
|
|
et un peu moins flexible que le (3) pour la s<>rialisation XML. N<>anmoins, il devrait <20>tre le choix par d<>faut pour la majorit<69> des besoins de s<>rialisation/d<>s<EFBFBD>rialisation.
|
|
|
|
|
|
|
|
|
|
1) Data Contract Serializer
|
|
|
|
|
C'est la solution la plus r<>cente et celle utilis<69>e par WCF. Il est particuli<6C>rement efficace pour :
|
|
|
|
|
- l'<27>change d'informations dans le respect des protocoles standards,
|
|
|
|
|
- lorsqu'on a besoin d'une bonne tol<6F>rance aux changements de versions (des types),
|
|
|
|
|
- la conservation des r<>f<EFBFBD>rences d'objets.
|
|
|
|
|
Il utilise un niveau d'abstraction <20> travers l'utilisation d'attributs qui rend son utilisation tr<74>s simplifi<66>e et tr<74>s adaptable.
|
|
|
|
|
Tant que vous n'avez aucune contrainte sur la forme des donn<6E>es XML en sortie (pas d'attributs par exemple), il est suffisant, sinon, il faudra utiliser un XmlSerializer.
|
|
|
|
|
|
|
|
|
|
2) Binary Serializer
|
|
|
|
|
Il est facile <20> utiliser et tr<74>s automatis<69> (encore plus que le DataContract Serializer). Il est utilis<69> dans des connections r<>seau ou lors de la communication entre applications.
|
|
|
|
|
Il est <20>galement plus rapide que le DataContract Serializer.
|
|
|
|
|
Les inconv<6E>nients sont : une tr<74>s faible tol<6F>rance aux changements de versions des types, un mauvais formatage XML malgr<67> l'utilisation possible de formateur (SOAP par exemple).
|
|
|
|
|
|
|
|
|
|
3) XmlSerializer
|
|
|
|
|
Il ne peut que produire de l'XML et est moins performant dans la sauvegarde des graphes d'objets (en particulier dans la conservation des r<>f<EFBFBD>rences d'objets).
|
|
|
|
|
En revanche, il est beaucoup plus flexible dans la structure XML (<28>l<EFBFBD>ments ou attributs...).
|
|
|
|
|
Il est aussi utilis<69> par les web services ASMX.
|
|
|
|
|
|
|
|
|
|
4) IXmlSerializable
|
|
|
|
|
Utiliser IXmlSerializable vous permet de cr<63>er votre propre s<>rialiseur/d<>s<EFBFBD>rialiseur en utilisant XmlReader/XmlWriter. L'interface est ensuite reconnue par XmlSerializer et
|
|
|
|
|
DataContractSerializer et peut donc <20>tre utilis<69>e conjointement avec eux.
|
|
|
|
|
|
|
|
|
|
Enfin, on peut ajouter aux deux premi<6D>res solutions des formateurs pour formater les sorties en XML ou binaire pour correspondre <20> certains protocoles (SOAP par exemple).
|
|
|
|
|
|
|
|
|
|
LINQ to XML
|
|
|
|
|
|
|
|
|
|
JSON
|