estructura WS_STRUCT_DESCRIPTION (webservices.h)
Información sobre el tipo de estructura C y cómo se asigna a un elemento XML. Se usa con WS_STRUCT_TYPE.
Sintaxis
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;
Miembros
size
El tamaño de la estructura en bytes.
alignment
Requisito de alineación de la estructura. Debe ser una potencia de dos entre 1 y 8.
fields
Matriz de punteros a las descripciones de los campos de la estructura.
Consulte la sección Comentarios para obtener información sobre el orden de los campos de esta matriz.
fieldCount
Número de campos de la matriz de campos. Cualquier parte de la estructura que no esté representada por un campo se dejará sin inicializar. Ninguna descripción de dos campos puede hacer referencia al mismo desplazamiento de la estructura.
typeLocalName
Nombre de tipo XML de la estructura. Esto solo se usa cuando las estructuras derivan de otras estructuras y pueden ser NULL en caso contrario.
typeNs
Espacio de nombres de tipo XML de la estructura. Esto solo se usa cuando las estructuras derivan de otras estructuras y pueden ser NULL en caso contrario.
parentType
El tipo del que se deriva este tipo. Esto solo se usa cuando las estructuras derivan de otras estructuras y pueden ser NULL en caso contrario.
subTypes
Matriz de punteros a tipos derivados. Esto solo se usa cuando las estructuras derivan de otras estructuras y pueden ser NULL en caso contrario.
subTypeCount
Número de tipos de la matriz subTypes. Esto solo se usa cuando las estructuras derivan de otras estructuras y pueden ser NULL en caso contrario.
structOptions
Comentarios
A continuación se muestra la gramática que describe el orden de los campos dentro de una estructura. El orden se define en función del campo de asignación de cada 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
Tenga en cuenta que las descripciones de campos de una estructura se serializan y deserializan en el orden especificado. El proceso de deserialización es "expansivos", es decir, tanto contenido como coincida con la definición, se consumirá una descripción de campo específica antes de que se considere la siguiente descripción del campo. Este enfoque resuelve cualquier ambigüedad cuando el contenido podría coincidir con la descripción del campo actual o una siguiente.
El proceso de deserialización también es restrictivo. Todo el contenido debe deserializarse según las descripciones del campo. De forma predeterminada, los elementos y atributos no administrados provocarán un error en el proceso de deserialización. Sin embargo, el contenido final del elemento se omite y se descarta cuando se establece WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT marca. Del mismo modo, los atributos no controlado se omiten y se descartan cuando se establece WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES marca.
Tenga en cuenta que, dado que las estructuras de WS_FIELD_DESCRIPTION determinan la ubicación del campo real dentro de la estructura mediante un desplazamiento, no hay ninguna restricción en cuanto al orden real de los campos dentro de la estructura.
Cuando una estructura deriva de (extiende) otra, los campos de ambas estructuras deben incluirse en la descripción de la estructura derivada y se debe mantener la gramática anterior. Por ejemplo:
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
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 7 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 R2 [solo aplicaciones de escritorio] |
Encabezado | webservices.h |