Compartir a través de


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