structure WS_STRUCT_DESCRIPTION (webservices.h)
Informations sur le type de struct C et la façon dont il est mappé à un élément XML. Il est utilisé avec WS_STRUCT_TYPE.
typedef struct _WS_STRUCT_DESCRIPTION {
ULONG size;
ULONG alignment;
WS_FIELD_DESCRIPTION **fields;
ULONG fieldCount;
WS_XML_STRING *typeLocalName;
WS_XML_STRING *typeNs;
WS_STRUCT_DESCRIPTION *parentType;
WS_STRUCT_DESCRIPTION **subTypes;
ULONG subTypeCount;
ULONG structOptions;
} WS_STRUCT_DESCRIPTION;
size
Taille de la structure, en octets.
alignment
Exigence d’alignement de la structure. Il doit s’agir d’une puissance de deux entre 1 et 8.
fields
Tableau de pointeurs vers les descriptions des champs de la structure.
Pour plus d’informations sur l’ordre des champs de ce tableau, consultez la section Remarques.
fieldCount
Nombre de champs dans le tableau de champs. Toute partie de la structure qui n’est pas représentée par un champ sera laissée non initialisée. Aucune description de deux champs ne peut référencer le même décalage de la structure.
typeLocalName
Nom de type XML de la structure. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.
typeNs
Espace de noms de type XML de la structure. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.
parentType
Type dont ce type est dérivé. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.
subTypes
Tableau de pointeurs vers des types dérivés. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.
subTypeCount
Nombre de types dans le tableau subTypes. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.
structOptions
Voici la grammaire décrivant l’ordre des champs au sein d’une structure. L’ordre est défini en fonction du champ de mappage de chaque WS_FIELD_DESCRIPTION.
Fields := TypeAttributeField? AttributeField* ContentFields UnmappedFields*
ContentFields := TextContentField | ElementContentFields
ElementContentFields := ElementContentField* ? AnyElementField?
ElementContentField := ElementField | RepeatingElementField | ElementChoiceField | RepeatingElementChoiceField
ElementField := WS_ELEMENT_FIELD_MAPPING
RepeatingElementField := WS_REPEATING_ELEMENT_FIELD_MAPPING
ElementChoiceField := WS_ELEMENT_CHOICE_FIELD_MAPPING
RepeatingElementChoiceField := WS_REPEATING_ELEMENT_CHOICE_FIELD_MAPPING
AnyElementField := WS_ANY_ELEMENT_FIELD_MAPPING
TextContentField := WS_TEXT_FIELD_MAPPING
UnmappedField := WS_NO_FIELD_MAPPING
TypeAttributeField := WS_TYPE_ATTRIBUTE_FIELD_MAPPING
AttributeField := WS_ATTRIBUTE_FIELD_MAPPING
Notez que les descriptions de champs d’une structure sont sérialisées et désérialisées dans l’ordre spécifié. Le processus de désérialisation est « gourmand », c’est-à-dire autant de contenu que correspondra à la définition qu’une description de champ spécifique sera consommée avant que la description de champ suivante ne soit prise en compte. Cette approche résout toute ambiguïté lorsque le contenu peut correspondre à la description de champ actuelle ou à une description suivante.
Le processus de désérialisation est également restrictif. Tout le contenu doit être désérialisé en fonction des descriptions des champs. Par défaut, tous les éléments et attributs non gérés entraînent l’échec du processus de désérialisation. Toutefois, le contenu de fin de l’élément est ignoré et ignoré lorsque WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT indicateur est défini. De même, les attributs non gérés sont ignorés et ignorés lorsque WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES indicateur est défini.
Notez que, étant donné que les structures WS_FIELD_DESCRIPTION déterminent l’emplacement du champ réel dans la structure à l’aide d’un décalage, il n’existe aucune restriction quant à l’ordre réel des champs au sein de la structure.
Lorsqu’une structure dérive de (étend) une autre structure, les champs des deux structures doivent être inclus dans la description de struct dérivée et la grammaire ci-dessus doit être conservée. Par exemple :
struct BaseStructure
{
const WS_STRUCT_DESCRIPTION* _type;
int baseAttribute;
int baseElement;
};
// BaseStructure field descriptions:
// WS_TYPE_ATTRIBUTE_FIELD_MAPPING // _type
// WS_ATTRIBUTE_FIELD_MAPPING // baseAttribute
// WS_ELEMENT_FIELD_MAPPING // baseElement
struct DerivedStructure
{
struct BaseStructure _base;
int derivedAttribute;
int derivedElement;
};
// DerivedStructure field descriptions:
// WS_TYPE_ATTRIBUTE_FIELD_MAPPING // _type
// WS_ATTRIBUTE_FIELD_MAPPING // baseAttribute
// WS_ATTRIBUTE_FIELD_MAPPING // derivedAttribute
// WS_ELEMENT_FIELD_MAPPING // baseElement
// WS_ELEMENT_FIELD_MAPPING // derivedElement
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 7 [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 R2 [applications de bureau uniquement] |
En-tête | webservices.h |