共用方式為


WS_STRUCT_DESCRIPTION 結構 (webservices.h)

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 之間的兩個乘冪。

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