You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/chap038_Sérialisation.txt

51 lines
3.6 KiB

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