Jenis yang Didukung oleh Serializer Kontrak Data

Windows Communication Foundation (WCF) menggunakan DataContractSerializer sebagai mesin serialisasi defaultnya untuk mengonversi data menjadi XML dan untuk mengonversi XML kembali menjadi data. DataContractSerializer dirancang untuk menserialisasikan jenis kontrak data. Namun, ini mendukung banyak jenis lain, yang dapat dianggap memiliki kontrak data implisit. Berikut ini adalah daftar lengkap jenis yang dapat diserialisasikan:

Batasan Penggunaan Jenis Tertentu dalam Mode Kepercayaan Parsial

Berikut ini adalah daftar batasan saat menggunakan jenis tertentu dalam skenario mode kepercayaan parsial:

  • Untuk menserialisasi atau mendeserialisasi jenis yang menerapkan ISerializable dalam kode kepercayaan parsial menggunakan DataContractSerializer memerlukan izin SerializationFormatter dan UnmanagedCode.

  • Saat menjalankan kode WCF dalam mode Kepercayaan Parsial, serialisasi dan deserialisasi bidang readonly (baik public dan private) tidak didukung. Ini karena bahasa perantara yang dihasilkan tidak dapat diverifikasi dan oleh karena itu memerlukan izin yang lebih tinggi.

  • Baik DataContractSerializer dan XmlSerializer didukung di lingkungan kepercayaan parsial. Namun, penggunaan DataContractSerializer harus mengikuti kondisi berikut:

    • Semua jenis [DataContract] yang dapat diserialisasikan harus bersifat publik.

    • Semua bidang atau properti [DataMember] yang dapat diserialisasikan dalam jenis [DataContract] harus bersifat publik dan baca/tulis. Serialisasi dan deserialisasi bidang readonly tidak didukung saat menjalankan WCF dalam aplikasi yang tepercaya parsial.

    • Model pemrograman [Serializable]/ISerializable] tidak didukung di lingkungan kepercayaan parsial.

    • Jenis yang diketahui harus ditentukan dalam kode atau konfigurasi tingkat mesin (Machine.config). Jenis yang diketahui tidak dapat ditentukan dalam konfigurasi tingkat aplikasi karena alasan keamanan.

  • Jenis yang menerapkan IObjectReference melemparkan pengecualian di lingkungan tepercaya parsial karena metode GetRealObject memerlukan izin keamanan [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Catatan Tambahan tentang Serialisasi

Aturan berikut juga berlaku untuk jenis yang didukung oleh Pembuat Serialisasi Kontrak Data:

  • Jenis generik sepenuhnya didukung oleh pembuat serialisasi kontrak data.

  • Jenis nilai yang dapat diubah ke null sepenuhnya didukung oleh pembuat serialisasi kontrak data.

  • Jenis antarmuka diperlakukan baik sebagai Object atau, dalam kasus antarmuka koleksi, sebagai jenis koleksi.

  • Baik struktur maupun kelas didukung.

  • DataContractSerializer tidak mendukung model pemrograman yang digunakan oleh XmlSerializer dan layanan Web ASP.NET. Secara khusus, ini tidak mendukung atribut seperti XmlElementAttribute dan XmlAttributeAttribute. Untuk memungkinkan dukungan model pemrograman ini, WCF harus dialihkan agar menggunakan XmlSerializer, bukan DataContractSerializer.

  • Jenis DBNull diperlakukan dengan cara khusus. Ini adalah jenis database tunggal, dan setelah deserialisasi, pembuat deserialisasi mematuhi batasan database tunggal dan mengarahkan semua referensi DBNull ke instans database tunggal. Karena DBNull merupakan jenis yang dapat diserialisasikan, izin SerializationFormatter diperlukan.

Lihat juga