Veri Üyesi Varsayılan Değerler
.NET Framework'te türler varsayılan değerler kavramına sahiptir. Örneğin, herhangi bir başvuru türü için varsayılan değer olur null
ve bir tamsayı türü için sıfırdır. Bir veri üyesi, varsayılan değerine ayarlandığında zaman zaman serileştirilmiş verilerden çıkarılma tercih edilir. Üye varsayılan bir değere sahip olduğundan, gerçek bir değerin seri hale getirilmemesi gerekir; bunun bir performans avantajı vardır.
Bir üyeyi serileştirilmiş verilerden atlamak için özniteliğinin özelliğini olarak ayarlayın EmitDefaultValue (varsayılan değerdirtrue
).DataMemberAttributefalse
Not
Birlikte çalışabilirlik veya veri boyutunu küçültme gibi belirli bir gereklilik varsa özelliğini false
olarak ayarlamanız EmitDefaultValue gerekir.
Örnek
Aşağıdaki kod, olarak ayarlanmış birkaç üyeye EmitDefaultValuefalse
sahiptir.
[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
Bu sınıfın bir örneği serileştirilmişse, sonuç aşağıdaki gibidir: employeeName
ve employeeID
seri hale getirilir. için employeeName
null değer ve için employeeID
sıfır değeri açıkça serileştirilmiş verilerin bir parçasıdır. Ancak, position
, salary
ve bonus
üyeleri serileştirilmemiştir. Son olarak, targetSalary
özelliği olarak ayarlanmış false
olsa EmitDefaultValue da her zamanki gibi seri hale getirilir çünkü 57800, sıfır olan bir tamsayı için .NET varsayılan değeriyle eşleşmez.
XML Gösterimi
Önceki örnek XML olarak serileştirilmişse, gösterim aşağıdakine benzerdir.
<Employee>
<employeeName xsi:nil="true" />
<employeeID>0</employeeID>
<targetSalary>57800</targetSalary>
</Employee>
xsi:nil
özniteliği, World Wide Web Consortium (W3C) XML Şeması örneği ad alanında null değeri açıkça temsil etmek için birlikte çalışabilir bir yol sağlayan özel bir özniteliktir. XML'de konum, maaş ve bonus veri üyeleri hakkında hiçbir bilgi olmadığını unutmayın. Alıcı uç, bunları sırasıyla , sıfır ve null
olarak null
yorumlayabilir. Üçüncü taraf seri durumdan çıkarıcının doğru yorumlamayı yapabilmesi garanti edilmez, bu nedenle bu desen önerilmez. DataContractSerializer sınıfı her zaman eksik değerler için doğru yorumu seçer.
IsRequired ile etkileşim
Veri Sözleşmesi Sürüm Oluşturma'da açıklandığı gibi özniteliğin DataMemberAttribute bir IsRequired özelliği vardır (varsayılan değerdirfalse
). özelliği, seri durumdan çıkarılırken belirli bir veri üyesinin serileştirilmiş verilerde bulunması gerekip gerekmediğini gösterir. olarak ayarlanırsa true
(bir değerin mevcut olması gerektiğini belirtir) ve EmitDefaultValue olarak ayarlanırsa IsRequired
false
(varsayılan değerine ayarlanırsa değerin mevcut olmaması gerektiğini belirtir), sonuçlar çelişkili olacağından bu veri üyesi için varsayılan değerler serileştirilemez. Böyle bir veri üyesi varsayılan değerine (genellikle null
veya sıfır) ayarlanırsa ve serileştirme denenirse, bir SerializationException oluşturulur.
Şema Gösterimi
Özellik olarak ayarlandığında false
veri üyelerinin XML Şema tanım dilinin (XSD) şema gösteriminin EmitDefaultValue
ayrıntıları Veri Sözleşmesi Şema Başvurusu'nda ele alınmaktadır. Bununla birlikte, aşağıda kısa bir genel bakış sağlanır:
EmitDefaultValue olarak ayarlandığında
false
, şemada Windows Communication Foundation'a (WCF) özgü bir ek açıklama olarak gösterilir. Bu bilgileri temsil etmenin birlikte çalışabilen bir yolu yoktur. Özellikle, şemadaki "default" özniteliği bu amaçla kullanılmaz,minOccurs
öznitelik yalnızca IsRequired ayardan etkilenir venillable
öznitelik yalnızca veri üyesinin türünden etkilenir.Kullanılacak gerçek varsayılan değer şemada yok. Eksik bir öğeyi uygun şekilde yorumlamak alıcı uç noktaya kadardır.
Şema içeri aktarma işleminde EmitDefaultValue , daha önce bahsedilen WCF'ye false
özgü ek açıklama algılandığında özellik otomatik olarak olarak ayarlanır. Ayrıca, ASP.NET Web hizmetleri tüketilirken yaygın olarak ortaya çıkan belirli birlikte çalışabilirlik senaryolarını desteklemek için özelliğinin ayarlandığı başvuru türleri nillable
için de olarak ayarlanır.false
false