структура 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 |