Partager via


Sérialisation

La sérialisation est le processus d’écriture de valeurs dans des 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 des 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 s’appuient sur une description du mappage entre les structures de données C et le xml.

Diagramme montrant comment la sérialisation et la désérialisation s’appuient sur une description du mappage entre les structures de données C et le 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 Lecteur XML pour les informations de sécurité liées au XML.

Le désérialiseur continue de désérialiser les données jusqu’à ce qu’il ait terminé la lecture de 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 en cours de désérialisation. À 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 qui provoquent l’échec de la désérialisation incluent, mais sans s’y limiter :

  • Éléments attendus manquants
  • Les champs d’élément inattendus s’affichent entre les éléments requis
  • Contenu d’élément supplémentaire après les champs obligatoires, sauf si le WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • Attributs inattendus, sauf si WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES indicateur est spécifié
  • Valeur de type de données inattendue qui est hors de la plage spécifiée
  • Le nombre d’éléments répétitifs est hors de la plage spécifiée

La sérialisation d’une grande quantité de données peut entraîner une allocation de mémoire excessive et entraîner une attaque par déni de service. L’utilisateur qui désérialise les données doit spécifier un objet Tas pour allouer les données, et l’utilisateur peut utiliser la limite d’allocation du tas pour empêcher les attaques d’allocation de mémoire.

Prise en charge des plages pour les types de données, y compris la longueur maximale pour la chaîne, le nombre maximal d’éléments dans le tableau, etc. permet à l’utilisateur de contrôler la taille maximale pour différents types de données. L’utilisateur peut spécifier une plage dans la description des données ou le schéma 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 fil (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 sans fin, 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 une chaîne avec 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 :