Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam .NET Framework, jenis memiliki konsep nilai default. Misalnya, untuk jenis referensi apa pun, nilai defaultnya adalah null, dan untuk jenis bilangan bulat, nilainya nol. Terkadang diinginkan untuk mengabaikan anggota data dari data berseri jika nilainya adalah nilai default. Karena anggota memiliki nilai default, nilai aktual tidak perlu diserialisasikan; ini memiliki keunggulan performa.
Untuk mengabaikan anggota dari data berseri, atur properti EmitDefaultValue dari atribut DataMemberAttribute menjadi false (nilai defaultnya adalah true).
Nota
Anda harus mengatur properti ke EmitDefaultValuefalse jika ada kebutuhan khusus untuk melakukannya, seperti untuk interoperabilitas atau pengurangan ukuran data.
Contoh
Kode berikut memiliki beberapa anggota yang diatur ke EmitDefaultValuefalse.
[DataContract]
public class Employee
{
[DataMember]
public string employeeName = null;
[DataMember]
public int employeeID = 0;
[DataMember(EmitDefaultValue = false)]
public string position = null;
[DataMember(EmitDefaultValue = false)]
public int salary = 0;
[DataMember(EmitDefaultValue = false)]
public int? bonus = null;
[DataMember(EmitDefaultValue = false)]
public int targetSalary = 57800;
}
<DataContract()> _
Public Class Employee
<DataMember()> _
Public employeeName As String = Nothing
<DataMember()> _
Public employeeID As Integer = 0
<DataMember(EmitDefaultValue:=False)> _
Public position As String = Nothing
<DataMember(EmitDefaultValue:=False)> _
Public salary As Integer = 0
<DataMember(EmitDefaultValue:=False)> _
Public Bonus As Integer = Bonus OrElse Nothing
<DataMember(EmitDefaultValue:=False)> _
Public targetSalary As Integer = 57800
End Class
Jika instans kelas ini diserialisasikan, hasilnya adalah sebagai berikut: employeeName dan employeeID diserialisasikan. Nilai null untuk employeeName dan nilai nol untuk employeeID secara eksplisit merupakan bagian dari data yang diserialisasikan. Namun, anggota position, salary, dan bonus tidak diserialisasikan. Akhirnya, targetSalary diserialisasikan seperti biasa, meskipun EmitDefaultValue properti diatur ke false, karena 57800 tidak cocok dengan nilai default .NET untuk bilangan bulat, yaitu nol.
Representasi XML
Jika contoh sebelumnya diserialisasikan ke XML, representasinya mirip dengan yang berikut ini.
<Employee>
<employeeName xsi:nil="true" />
<employeeID>0</employeeID>
<targetSalary>57800</targetSalary>
</Employee>
Atribut xsi:nil adalah atribut khusus dalam namespace instans Skema XML World Wide Web Consortium (W3C) yang menyediakan cara yang dapat dioperasikan untuk secara eksplisit mewakili nilai null. Perhatikan bahwa tidak ada informasi sama sekali di XML tentang posisi, gaji, dan anggota data bonus. Akhir penerimaan dapat menafsirkan ini sebagai null, nol, dan null, masing-masing. Tidak ada jaminan bahwa deserializer pihak ketiga dapat membuat interpretasi yang benar, itulah sebabnya pola ini tidak direkomendasikan. Kelas DataContractSerializer selalu memilih interpretasi yang benar untuk nilai yang hilang.
Interaksi dengan IsRequired
Seperti yang dibahas dalam Penerapan Versi Kontrak Data, DataMemberAttribute atribut memiliki IsRequired properti (defaultnya adalah false). Properti ini menunjukkan apakah suatu anggota data tertentu harus ada dalam data ter-serialisasi ketika sedang dideserialisasi. Jika IsRequired diatur ke true, (yang menunjukkan bahwa nilai harus ada) dan EmitDefaultValue diatur ke false (menunjukkan bahwa nilai tidak boleh ada jika diatur ke nilai defaultnya), nilai default untuk anggota data ini tidak dapat diserialisasikan karena hasilnya akan bertentangan. Jika anggota data tersebut diatur ke nilai defaultnya (biasanya null atau nol) dan serialisasi dicoba, SerializationException akan dilemparkan.
Representasi Skema
Detail representasi skema bahasa definisi Skema XML (XSD) untuk anggota data ketika properti EmitDefaultValue diatur menjadi false dibahas dalam Referensi Skema Kontrak Data. Namun, berikut ini adalah gambaran umum singkat:
Ketika EmitDefaultValue diatur menjadi
false, itu diwakili dalam skema sebagai anotasi yang khusus untuk Windows Communication Foundation (WCF). Tidak ada cara yang dapat dioperasikan untuk mewakili informasi ini. Secara khusus, atribut "default" dalam skema tidak digunakan untuk tujuan ini,minOccursatribut hanya dipengaruhi oleh IsRequired pengaturan, dannillableatribut hanya dipengaruhi oleh jenis anggota data.Nilai default aktual yang digunakan tidak ada dalam skema. Terserah titik akhir penerimaan untuk menafsirkan elemen yang hilang dengan tepat.
Pada impor skema, EmitDefaultValue properti secara otomatis diatur ke false setiap kali anotasi khusus WCF yang disebutkan sebelumnya terdeteksi. Ini juga diatur ke false untuk tipe referensi yang memiliki properti nillable yang diatur ke false guna mendukung skenario interoperabilitas khusus yang umum terjadi saat mengonsumsi layanan Web ASP.NET.