WS_STRUCT_DESCRIPTION-Struktur (webservices.h)

Informationen zum Strukturtyp C und zur Zuordnung zu einem XML-Element. Dies wird mit WS_STRUCT_TYPE verwendet.

Syntax

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;

Member

size

Die Größe der Struktur in Bytes.

alignment

Die Ausrichtungsanforderung der Struktur. Dies muss eine Potenz von zwei zwischen 1 und 8 sein.

fields

Ein Array von Zeigern auf die Beschreibungen der Felder der -Struktur.

Informationen zur Reihenfolge der Felder in diesem Array finden Sie im Abschnitt Hinweise.

fieldCount

Die Anzahl der Felder im Feldarray. Jeder Teil der Struktur, der nicht durch ein Feld dargestellt wird, wird nicht initialisiert. Keine zwei Feldbeschreibungen dürfen auf denselben Offset der -Struktur verweisen.

typeLocalName

Der XML-Typname der Struktur. Dies wird nur verwendet, wenn Strukturen von anderen Strukturen abgeleitet werden und andernfalls NULL sein kann.

typeNs

Der XML-Typnamespace der -Struktur. Dies wird nur verwendet, wenn Strukturen von anderen Strukturen abgeleitet werden und andernfalls NULL sein kann.

parentType

Der Typ, von dem dieser Typ abgeleitet wird. Dies wird nur verwendet, wenn Strukturen von anderen Strukturen abgeleitet werden und andernfalls NULL sein kann.

subTypes

Ein Array von Zeigern auf abgeleitete Typen. Dies wird nur verwendet, wenn Strukturen von anderen Strukturen abgeleitet werden und andernfalls NULL sein kann.

subTypeCount

Die Anzahl der Typen im SubTypes-Array. Dies wird nur verwendet, wenn Strukturen von anderen Strukturen abgeleitet werden und andernfalls NULL sein kann.

structOptions

Hinweise

Im Folgenden sehen Sie die Grammatik, die die Reihenfolge der Felder in einer -Struktur beschreibt. Die Reihenfolge wird basierend auf dem Zuordnungsfeld der einzelnen WS_FIELD_DESCRIPTION definiert.


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

Beachten Sie, dass die Feldbeschreibungen einer Struktur in der angegebenen Reihenfolge serialisiert und deserialisiert werden. Der Deserialisierungsprozess ist "gierig", d. h. so viel Inhalt, wie der Definition entspricht, wird eine bestimmte Feldbeschreibung verwendet, bevor die nächste Feldbeschreibung berücksichtigt wird. Durch diesen Ansatz werden Mehrdeutigkeiten behoben, wenn der Inhalt mit der aktuellen Feldbeschreibung oder einer folgenden übereinstimmen könnte.

Der Deserialisierungsprozess ist ebenfalls restriktiv. Der gesamte Inhalt muss gemäß den Feldbeschreibungen deserialisiert werden. Standardmäßig führen alle nicht behandelten Elemente und Attribute dazu, dass der Deserialisierungsprozess fehlschlägt. Nachfolgende Inhalte des Elements werden jedoch ignoriert und verworfen, wenn WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT Flag festgelegt ist. Ebenso werden nicht behandelte Attribute ignoriert und verworfen, wenn WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES Flag festgelegt ist.

Da die WS_FIELD_DESCRIPTION Strukturen die Position des tatsächlichen Felds innerhalb der Struktur mithilfe eines Offsets bestimmen, gibt es keine Einschränkung hinsichtlich der tatsächlichen Reihenfolge der Felder innerhalb der Struktur.

Wenn eine Struktur von einer anderen abgeleitet (erweitert) wird, müssen die Felder für beide Strukturen in die Beschreibung der abgeleiteten Struktur aufgenommen werden, und die obige Grammatik muss beibehalten werden. Beispiel:

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Kopfzeile webservices.h