Bagikan melalui


Kelas System.Runtime.Serialization.DataContractAttribute

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Terapkan atribut DataContractAttribute untuk jenis (kelas, struktur, atau enumerasi) yang digunakan dalam operasi serialisasi dan deserialisasi oleh DataContractSerializer. Jika Anda mengirim atau menerima pesan dengan menggunakan infrastruktur Windows Communication Foundation (WCF), Anda juga harus menerapkan DataContractAttribute ke kelas apa pun yang menyimpan dan memanipulasi data yang dikirim dalam pesan. Untuk informasi selengkapnya tentang kontrak data, lihat Menggunakan Kontrak Data.

Anda juga harus menerapkan DataMemberAttribute pada bidang, properti, atau peristiwa apa pun yang menyimpan nilai yang ingin Anda serialkan. Dengan menerapkan DataContractAttribute, Anda secara eksplisit mengaktifkan DataContractSerializer untuk menserialisasikan dan mendeserialisasi data.

Perhatian

Anda dapat menerapkan DataMemberAttribute pada bidang privat. Ketahuilah bahwa data yang dikembalikan oleh bidang (bahkan jika bersifat privat) diserialisasikan dan dideserialisasi, dan dengan demikian dapat dilihat atau disadap oleh pengguna atau proses berbahaya.

Untuk informasi selengkapnya tentang kontrak data, lihat topik yang tercantum dalam Menggunakan Kontrak Data.

Kontrak data

Kontrak data adalah deskripsi abstrak dari sekumpulan bidang dengan nama dan jenis data untuk setiap bidang. Kontrak data ada di luar implementasi tunggal apa pun untuk memungkinkan layanan pada platform yang berbeda beroperasi. Selama data yang diteruskan antara layanan sesuai dengan kontrak yang sama, semua layanan dapat memproses data. Pemrosesan ini juga dikenal sebagai sistem yang digabungkan secara longgar. Kontrak data juga mirip dengan antarmuka di mana kontrak menentukan bagaimana data harus dikirimkan sehingga dapat diproses oleh aplikasi. Misalnya, kontrak data dapat memanggil jenis data bernama "Orang" yang memiliki dua bidang teks, bernama "FirstName" dan "LastName". Untuk membuat kontrak data, terapkan DataContractAttribute ke kelas dan terapkan DataMemberAttribute ke bidang atau properti apa pun yang harus diserialisasikan. Saat diserialisasi, data sesuai dengan kontrak data yang secara implisit terdapat di dalam tipe.

Nota

Kontrak data berbeda secara signifikan dari antarmuka aktual dalam perilaku warisannya. Antarmuka diwariskan oleh tipe turunan apa pun. Saat Anda menerapkan DataContractAttribute pada kelas dasar, tipe turunan tidak mewarisi atribut atau perilakunya. Namun, jika jenis turunan memiliki kontrak data, anggota data kelas dasar diserialisasikan. Namun, Anda harus menerapkannya DataMemberAttribute ke anggota baru di kelas turunan supaya bisa diserialisasikan.

Dokumen skema XML dan alat SvcUtil

Jika Anda bertukar data dengan layanan lain, Anda harus menjelaskan kontrak data. Untuk versi saat ini, DataContractSerializerskema XML dapat digunakan untuk menentukan kontrak data. (Bentuk metadata/deskripsi lainnya dapat digunakan untuk tujuan yang sama.) Untuk membuat skema XML dari aplikasi Anda, gunakan ServiceModel Metadata Utility Tool (Svcutil.exe) dengan opsi baris perintah /dconly . Ketika input ke alat adalah rakitan, secara default, alat ini menghasilkan sekumpulan skema XML yang menentukan semua jenis kontrak data yang ditemukan dalam rakitan tersebut. Sebaliknya, Anda juga dapat menggunakan alat Svcutil.exe untuk membuat definisi kelas Visual Basic atau C# yang sesuai dengan persyaratan skema XML yang menggunakan konstruksi yang dapat diekspresikan oleh kontrak data. Dalam hal ini, opsi baris perintah /dconly tidak diperlukan.

Jika input ke alat Svcutil.exe adalah skema XML, secara default, alat ini membuat sekumpulan kelas. Jika Anda memeriksa kelas tersebut, Anda akan menemukan bahwa DataContractAttribute telah diterapkan. Anda dapat menggunakan kelas tersebut untuk membuat aplikasi baru untuk memproses data yang harus ditukar dengan layanan lain.

Anda juga dapat menjalankan alat terhadap titik akhir yang mengembalikan dokumen Web Services Description Language (WSDL) untuk secara otomatis menghasilkan kode dan konfigurasi untuk membuat klien Windows Communication Foundation (WCF). Kode yang dihasilkan mencakup jenis yang ditandai dengan DataContractAttribute.

Gunakan kembali jenis yang sudah ada

Kontrak data memiliki dua persyaratan dasar: nama yang stabil dan daftar anggota. Nama stabil terdiri dari pengidentifikasi sumber daya seragam namespace (URI) dan nama lokal kontrak. Secara default, saat Anda menerapkan DataContractAttribute ke kelas, itu menggunakan nama kelas sebagai nama lokal dan namespace kelas (diawali dengan "http://schemas.datacontract.org/2004/07/") sebagai URI namespace. Anda dapat menggantikan default dengan mengatur properti Name dan Namespace. Anda juga dapat mengubah namespace dengan menerapkan ContractNamespaceAttribute ke namespace. Gunakan kemampuan ini ketika Anda memiliki tipe yang sudah ada yang memproses data dengan cara yang Anda perlukan tetapi memiliki namespace dan nama kelas yang berbeda dari kontrak data. Dengan mengesampingkan nilai default, Anda dapat menggunakan kembali jenis yang ada dan memiliki data berseri sesuai dengan kontrak data.

Nota

Dalam kode apa pun, Anda dapat menggunakan kata DataContract alih-alih lebih lama DataContractAttribute.

Pembuatan Versi

Kontrak data juga dapat mengakomodasi versi yang lebih baru dari dirinya sendiri. Artinya, ketika versi kontrak yang lebih baru menyertakan data tambahan, data tersebut disimpan dan dikembalikan ke pengirim yang tidak tersentuh. Untuk melakukan ini, terapkan IExtensibleDataObject antarmuka.

Untuk informasi selengkapnya tentang penerapan versi, lihat Penerapan Versi Kontrak Data.