次の方法で共有


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 の間の 2 の累乗である必要があります。

fields

構造体のフィールドの説明へのポインターの配列。

この配列内のフィールドの順序については、「解説」セクションを参照してください。

fieldCount

フィールド配列内のフィールドの数。 フィールドで表されない構造体の任意の部分は、初期化されていないままになります。 構造体の同じオフセットを参照する 2 つのフィールドの説明はありません。

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

構造体のフィールドの説明は、指定された順序でシリアル化および逆シリアル化されることに注意してください。 逆シリアル化プロセスは "greedy" です。つまり、定義に一致するコンテンツと同じくらい、次のフィールドの説明が考慮される前に、特定のフィールドの説明が使用されます。 この方法では、コンテンツが現在のフィールドの説明または次の説明と一致する可能性がある場合のあいまいさを解決します。

逆シリアル化プロセスも制限されています。 フィールドの説明に従って、すべてのコンテンツを逆シリアル化する必要があります。 既定では、未処理の要素と属性によって逆シリアル化プロセスが失敗します。 ただし、 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 [デスクトップ アプリのみ]
Header webservices.h