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.

Diagramme montrant comment la sérialisation et la désérialisation 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 :

Les fonctions suivantes sont utilisées avec la sérialisation :

Les structures suivantes sont utilisées avec la sérialisation :