Sérialisation
La sérialisation est le processus d’écriture de valeurs dans les structures de données C (structs, tableaux et valeurs primitives) en tant qu’élément XML. La désérialisation est le processus inverse.
La sérialisation est le processus d’écriture de valeurs dans les structures de données C (structures, tableaux et valeurs primitives) en tant qu’élément XML. La désérialisation est le processus inverse.
Les deux processus reposent sur une description du mappage entre les structures de données C et XML.

Pour sérialiser une valeur, l’application appelle WsWriteElement, WsWriteAttribute ou WsWriteType.
Pour désérialiser une valeur, l’application appelle WsReadElement, WsReadAttribute ou WsReadType.
Sécurité
Le lecteur XML est utilisé dans le processus de désérialisation. Reportez-vous à la section sécurité dans le lecteur XML pour obtenir des informations de sécurité liées à XML.
Le désérialiseur continue à désérialiser les données jusqu’à ce qu’il ait terminé de lire l’élément en cours de désérialisation. Le processus de désérialisation échoue lorsqu’il rencontre un document XML qui n’est pas conforme à la description des données désérialisées. À ce stade, le lecteur XML utilisé devient non valide et une erreur est retournée.
Par défaut, la désérialisation est stricte. Certaines conditions provoquant l’échec de la désérialisation incluent, sans s’y limiter, les conditions suivantes :
- Éléments attendus manquants
- Des champs d’élément inattendus apparaissent entre les éléments requis
- Contenu de l’élément supplémentaire après les champs obligatoires, à moins que le WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
- Attributs inattendus, sauf si l’indicateur WS _ struct _ ignore les _ _ attributs non gérés est spécifié
- Valeur de type de données inattendue en dehors de la plage spécifiée
- Le nombre d’éléments répétitifs est en dehors de la plage spécifiée
La sérialisation d’une grande quantité de données peut entraîner une allocation excessive de la mémoire et peut entraîner une attaque par déni de service. L’utilisateur qui désérialise les données doit spécifier un objet segment de mémoire pour allouer les données, et l’utilisateur peut utiliser la limite d’allocation du tas pour empêcher une attaque d’allocation de mémoire.
La prise en charge de plage pour les types de données, notamment la longueur maximale pour les chaînes, le nombre maximal d’éléments dans le tableau, etc. permet à l’utilisateur de contrôler la taille maximale des différents types de données. L’utilisateur peut spécifier une plage dans la description ou le schéma des données pour limiter la taille maximale des différentes données.
Une valeur de chaîne contenant un zéro incorporé est prise en charge dans les formats de transmission (texte, binaire, MTOM). Lors de la désérialisation d’une chaîne avec un zéro incorporé, l’utilisateur doit utiliser une chaîne comptée (WS _ String) afin que le zéro ne confonde pas le calcul de la longueur de la chaîne. Si une valeur de chaîne contenant un zéro incorporé est désérialisée dans un champ qui attend une chaîne se terminant par zéro, une erreur est retournée et la désérialisation échoue. Si Wsutil est utilisé pour générer des descriptions de données, l’option/String : WS _ String doit être utilisée si la chaîne avec un zéro incorporé est attendue.
Les rappels suivants sont utilisés avec la sérialisation :
Les énumérations suivantes sont utilisées avec la sérialisation :
- _mappage de champs WS _
- _options de champ WS _
- _option WS Read _
- _type WS
- _mappage de type WS _
- _option d’écriture WS _
Les fonctions suivantes sont utilisées avec la sérialisation :
Les structures suivantes sont utilisées avec la sérialisation :
- Description de l' _ attribut WS _
- _Description WS bool _
- Description de WS _ octets _
- _Description du _ tableau WS Byte _
- _Description du _ tableau de caractères WS _
- _Description du _ type _ personnalisé WS
- Description de WS _ DateTime _
- Description de WS _ Decimal _
- _valeur par défaut de WS _
- Description de WS _ double _
- Description de la _ durée WS _
- Description de l' _ élément WS _
- Description de l' _ adresse du point de terminaison WS _ _
- Description de WS _ enum _
- _valeur d’énumération WS _
- Description de l' _ erreur WS _
- _Description du champ WS _
- _Description WS float _
- _Description du GUID WS _
- _Description WS Int16 _
- _Description WS Int32 _
- _Description WS Int64 _
- Description de WS _ INT8 _
- _plage d’éléments WS _
- Description de la _ chaîne WS _
- Description de WS _ struct _
- _Description WS TIMESPAN _
- Description de WS _ UINT16 _
- Description de WS _ UInt32 _
- _Description WS UINT64 _
- Description de WS _ UINT8 _
- Description de WS _ Union _
- _Description du _ champ WS Union _
- Description de l' _ ID unique de WS _ _
- _Description du _ tableau WS UTF8 _
- Description de WS _ void _
- Description de WS _ WSZ _
- _Description du _ QName _ XML WS
- Description de la _ chaîne XML WS _ _