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:
Semua jenis yang dapat dilihat publik yang memiliki konstruktor tanpa parameter.
Jenis kontrak data. Ini adalah jenis dengan atribut DataContractAttribute yang telah diterapkan. Jenis kustom baru yang merepresentasikan objek bisnis secara normal harus dibuat sebagai jenis kontrak data. Untuk informasi selengkapnya, lihat Menggunakan Kontrak Data dan Jenis Yang Dapat Diserialisasikan.
Jenis koleksi. Ini adalah jenis yang merepresentasikan daftar data. Ini bisa jadi array jenis reguler, atau jenis koleksi, seperti ArrayList dan Dictionary<TKey,TValue>. Atribut CollectionDataContractAttribute dapat digunakan untuk menyesuaikan serialisasi jenis ini, tetapi tidak diperlukan. Untuk informasi selengkapnya, lihat Jenis Koleksi dalam Kontrak Data.
Jenis enumerasi. Enumerasi, termasuk enumerasi bendera, dapat diserialisasikan. Secara opsional, jenis enumerasi dapat ditandai dengan atribut DataContractAttribute, dalam hal ini setiap anggota yang berpartisipasi dalam serialisasi harus ditandai dengan atribut EnumMemberAttribute. Anggota yang tidak ditandai tidak diserialisasikan. Untuk informasi selengkapnya, lihat Jenis Enumerasi dalam Kontrak Data.
Jenis primitif .NET Framework. Semua jenis berikut yang disertakan dalam .NET Framework dapat diserialisasikan dan dianggap sebagai jenis primitif: Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object, dan String.
Jenis primitif lainnya. Jenis-jenis ini bukan primitif dalam .NET Framework, tetapi diperlakukan sebagai primitif dalam bentuk XML yang diserialisasi. Jenis-jenis ini adalah DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedName, dan arrays Byte.
Catatan
Tidak seperti jenis primitif lainnya, DateTimeOffset bukan jenis yang diketahui secara default. Untuk informasi selengkapnya, lihat Jenis yang Diketahui Kontrak Data.
Jenis yang ditandai dengan atribut SerializableAttribute. Banyak jenis yang disertakan dalam perpustakaan kelas dasar .NET Framework termasuk dalam kategori ini. DataContractSerializer sepenuhnya mendukung model pemrograman serialisasi ini yang digunakan oleh .NET Framework jarak jauh, BinaryFormatter, dan SoapFormatter, termasuk dukungan untuk antarmuka ISerializable.
Jenis yang merepresentasikan XML mentah atau jenis yang merepresentasikan data relasional ADO.NET. XmlElement dan array jenis XmlNode didukung sebagai cara merepresentasikan XML secara langsung. Selain itu, jenis yang mengimplementasikan antarmuka IXmlSerializable didukung, termasuk atribut XmlSchemaProviderAttribute yang terkait, serta jenis XDocument dan XElement. Jenis ADO.NETDataTable dan jenis DataSet (serta kelas turunan yang berjenis) semuanya mengimplementasikan antarmuka IXmlSerializable, dan cocok dengan kategori ini. Untuk informasi selengkapnya, lihat Jenis XML dan ADO.NET dalam Kontrak Data.
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
(baikpublic
danprivate
) 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 bidangreadonly
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. KarenaDBNull
merupakan jenis yang dapat diserialisasikan, izin SerializationFormatter diperlukan.