Serialisasi

Serialisasi adalah proses penulisan nilai dalam struktur data C (struktur, array, dan nilai primitif) sebagai elemen XML. Deserialisasi adalah proses terbalik.

Serialisasi adalah proses penulisan nilai dalam struktur data C (struktur, array, dan nilai primitif) sebagai elemen XML. Deserialisasi adalah proses terbalik.

Kedua proses mengandalkan deskripsi pemetaan antara struktur data C dan XML.

Diagram memperlihatkan bagaimana serialisasi dan deserialisasi mengandalkan deskripsi pemetaan antara struktur data C dan XML.

Untuk membuat serialisasi nilai, aplikasi memanggil WsWriteElement, WsWriteAttribute atau WsWriteType.

Untuk mendeserialisasi nilai, aplikasi memanggil WsReadElement, WsReadAttribute atau WsReadType.

Keamanan

Pembaca XML digunakan dalam proses deserialisasi. Lihat bagian keamanan di Pembaca XML untuk informasi keamanan terkait XML.

Deserializer terus mendeserialisasi data sampai selesai membaca elemen yang dideserialisasi. Proses deserialisasi gagal ketika menemukan dokumen XML apa pun yang tidak sesuai dengan deskripsi data yang sedang dideserialisasi. Pada saat itu pembaca XML yang digunakan menjadi tidak valid, dan kesalahan dikembalikan.

Secara default deserialisasi ketat. Beberapa kondisi yang menyebabkan deserialisasi gagal termasuk tetapi tidak terbatas pada:

  • Elemen yang diharapkan hilang
  • Bidang elemen tak terduga muncul di antara elemen yang diperlukan
  • Konten elemen tambahan setelah bidang yang diperlukan, kecuali WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • Atribut tak terduga, kecuali bendera WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES ditentukan
  • Nilai tipe data tak terduga yang berada di luar rentang yang ditentukan
  • Jumlah elemen berulang berada di luar rentang yang ditentukan

Serialisasi sejumlah besar data dapat menyebabkan alokasi memori yang berlebihan dan dapat menyebabkan penolakan serangan layanan. Pengguna yang mendeserialisasi data harus menentukan objek Heap untuk mengalokasikan data, dan pengguna dapat menggunakan batas alokasi heap untuk mencegah serangan alokasi memori.

Dukungan rentang untuk jenis data, termasuk panjang maksimum untuk string, jumlah elemen maks dalam array, dll. memungkinkan pengguna mengontrol ukuran maksimum untuk jenis data yang berbeda. Pengguna dapat menentukan rentang dalam deskripsi data atau skema untuk membatasi ukuran maksimum data yang berbeda.

Nilai string yang berisi nol yang disematkan didukung dalam format kawat (teks, biner, MTOM). Saat mendeserialisasi string dengan nol yang disematkan, pengguna harus menggunakan string yang dihitung (WS_STRING) sehingga nol tidak akan membingungkan perhitungan panjang string. Jika nilai string yang berisi nol yang disematkan dideserialisasi ke dalam bidang yang mengharapkan string nol dihentikan, kesalahan dikembalikan, dan deserialisasi gagal. Jika wsutil digunakan untuk menghasilkan deskripsi data, opsi /string:WS_STRING harus digunakan jika string dengan nol yang disematkan diharapkan.

Panggilan balik berikut digunakan dengan serialisasi:

Enumerasi berikut digunakan dengan serialisasi:

Fungsi berikut digunakan dengan serialisasi:

Struktur berikut digunakan dengan serialisasi: