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