Jenis yang Dapat Diserialisasikan
Secara default, DataContractSerializer membuat serialisasi semua jenis yang terlihat secara publik. Semua properti baca/tulis publik dan bidang jenis diserialisasikan.
Anda dapat mengubah perilaku default dengan menerapkan atribut DataContractAttribute dan DataMemberAttribute ke jenis dan anggota. Fitur ini dapat berguna dalam situasi saat Anda memiliki jenis yang tidak berada di bawah kontrol Anda dan tidak dapat dimodifikasi untuk menambahkan atribut. DataContractSerializer mengenali jenis "tidak ditandai" seperti itu.
Default Serialisasi
Anda dapat menerapkan atribut DataContractAttribute dan DataMemberAttribute untuk mengontrol atau menyesuaikan serialisasi jenis dan anggota secara eksplisit. Selain itu, Anda dapat menerapkan atribut ini ke bidang privat. Namun, bahkan jenis yang tidak ditandai dengan atribut ini diserialisasikan dan dideserialisasi. Aturan dan pengecualian berikut berlaku:
DataContractSerializer menyimpulkan kontrak data dari jenis tanpa atribut menggunakan properti default dari jenis yang baru dibuat.
Semua bidang publik, dan properti dengan metode
get
danset
publik diserialisasikan, kecuali Anda menerapkan atribut IgnoreDataMemberAttribute ke anggota tersebut.Semantik serialisasi mirip dengan semantik XmlSerializer.
Dalam jenis yang tidak ditandai, hanya jenis publik dengan konstruktor yang tidak memiliki parameter yang diserialisasikan. Pengecualian untuk aturan ExtensionDataObject digunakan dengan antarmuka IExtensibleDataObject.
Bidang baca-saja, properti tanpa metode
get
atauset
, dan properti dengan metodeset
atauget
internal atau privat tidak diserialisasikan. Properti tersebut diabaikan dan tidak ada pengecualian yang dilemparkan, kecuali dalam kasus koleksi get-only.atribut XmlSerializer (seperti
XmlElement
,XmlAttribute
,XmlIgnore
,XmlInclude
, dan sebagainya) diabaikan.Jika Anda tidak menerapkan atribut DataContractAttribute ke jenis tertentu, pembuat serial mengabaikan anggota mana pun dalam jenis tersebut ke tempat atribut DataMemberAttribute diterapkan.
Properti KnownTypes didukung dalam jenis yang tidak ditandai dengan atribut DataContractAttribute. Ini termasuk dukungan untuk atribut KnownTypeAttribute pada jenis yang tidak ditandai.
Untuk "menolak" proses serialisasi untuk anggota publik, properti, atau bidang, terapkan atribut IgnoreDataMemberAttribute ke anggota tersebut.
Warisan
Jenis yang tidak ditandai (jenis tanpa atribut DataContractAttribute) dapat mewarisi dari jenis yang memang memiliki atribut ini; namun, sebaliknya tidak diizinkan: jenis dengan atribut tidak dapat mewarisi dari jenis yang tidak ditandai. Aturan ini diberlakukan terutama untuk memastikan kompatibilitas mundur dengan kode yang ditulis dalam versi .NET Framework sebelumnya.