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 |