struktur WS_STRUCT_DESCRIPTION (webservices.h)
Informasi tentang jenis struct C, dan cara memetakannya ke elemen XML. Ini digunakan dengan WS_STRUCT_TYPE.
Sintaks
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;
Anggota
size
Ukuran struktur, dalam byte.
alignment
Persyaratan penyelarasan struktur. Ini harus menjadi kekuatan dua antara 1 dan 8.
fields
Array pointer ke deskripsi bidang struktur.
Lihat bagian Keterangan untuk informasi tentang urutan bidang dalam array ini.
fieldCount
Jumlah bidang dalam array bidang. Bagian mana pun dari struktur yang tidak diwakili oleh bidang akan dibiarkan tidak diinisialisasi. Tidak ada dua deskripsi bidang yang dapat mereferensikan offset struktur yang sama.
typeLocalName
Nama jenis XML struktur. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.
typeNs
Namespace tipe XML dari struktur. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.
parentType
Jenis jenis ini berasal dari. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.
subTypes
Array pointer ke jenis turunan. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.
subTypeCount
Jumlah jenis dalam array subTypes. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.
structOptions
Keterangan
Berikut ini adalah tata bahasa yang menjelaskan urutan bidang dalam struktur. Urutan ditentukan berdasarkan bidang pemetaan setiap 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
Perhatikan bahwa deskripsi bidang struktur diserialisasikan dan dideserialisasi dalam urutan yang ditentukan. Proses deserialisasi adalah "serakah", yaitu, sebanyak konten yang akan cocok dengan definisi deskripsi bidang tertentu akan digunakan sebelum deskripsi bidang berikutnya akan dipertimbangkan. Pendekatan ini menyelesaikan ambiguitas apa pun ketika konten dapat cocok dengan deskripsi bidang saat ini atau yang berikut.
Proses deserialisasi juga ketat. Semua konten harus dideserialisasi sesuai dengan deskripsi bidang. Secara default, elemen dan atribut yang tidak tertangani akan menyebabkan proses deserialisasi gagal. Namun, konten elemen berikutnya diabaikan dan dibuang saat bendera WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT diatur. Demikian pula, atribut yang tidak tertangani diabaikan dan dibuang saat bendera WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES diatur.
Perhatikan bahwa karena struktur WS_FIELD_DESCRIPTION menentukan lokasi bidang aktual dalam struktur menggunakan offset, tidak ada batasan untuk urutan aktual bidang dalam struktur.
Ketika satu struktur berasal dari (memperluas) yang lain, bidang untuk kedua struktur harus disertakan dalam deskripsi struktur turunan, dan tata bahasa di atas harus dipertahankan. Contohnya:
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
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 7 [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2008 R2 [hanya aplikasi desktop] |
Header | webservices.h |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk