webservices.h) (WS_STRUCT_DESCRIPTION 结构
有关 C 结构类型及其映射到 XML 元素的方式的信息。 这与 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
结构大小(以字节为单位)。
alignment
结构的对齐要求。 这必须是介于 1 和 8 之间的 2 的幂。
fields
指向结构的字段说明的指针数组。
有关此数组中字段排序的信息,请参阅“备注”部分。
fieldCount
字段数组中的字段数。 结构中未由字段表示的任何部分都将保持未初始化。 没有两个字段说明可以引用结构的相同偏移量。
typeLocalName
结构的 XML 类型名称。 这仅在结构派生自其他结构时使用,否则可为 NULL 。
typeNs
结构的 XML 类型命名空间。 这仅在结构派生自其他结构时使用,否则可为 NULL 。
parentType
此类型派生自的类型。 这仅在结构派生自其他结构时使用,否则可为 NULL 。
subTypes
指向派生类型的指针数组。 这仅在结构派生自其他结构时使用,否则可为 NULL 。
subTypeCount
subTypes 数组中的类型数。 这仅在结构派生自其他结构时使用,否则可为 NULL 。
structOptions
注解
下面是描述结构中字段顺序的语法。 顺序基于每个 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
请注意,结构的字段说明将按照指定的顺序进行序列化和反序列化。 反序列化过程是“贪婪的”,也就是说,与定义匹配的内容一样多,在考虑下一个字段说明之前,将使用特定的字段说明。 当内容可以匹配当前字段说明或以下说明时,此方法可解决任何歧义。
反序列化过程也是限制性的。 必须根据字段说明反序列化所有内容。 默认情况下,任何未经处理的元素和属性都将导致反序列化过程失败。 但是,设置 WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT 标志时,将忽略并丢弃元素的尾随内容。 同样,设置 WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES 标志时,将忽略并丢弃未经处理的属性。
请注意,由于 WS_FIELD_DESCRIPTION 结构使用偏移量确定结构中实际字段的位置,因此对结构中字段的实际顺序没有限制。
当一个结构派生自 (扩展) 另一个结构时,这两个结构的字段必须包含在派生的结构说明中,并且必须保持上述语法。 例如:
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
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
标头 | webservices.h |