Aracılığıyla paylaş


Veri Üyesi Varsayılan Değerleri

.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 null'dır ve bir tamsayı türü için sıfırdır. Bir veri elemanı, varsayılan değerine ayarlandığında zaman zaman serileştirilmiş verilerden çıkarılması 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 çıkarmak için EmitDefaultValue özniteliğinin DataMemberAttribute özelliğini false olarak ayarlayın (varsayılan true).

Uyarı

Birlikte çalışabilirlik veya veri boyutunu küçültme gibi belirli bir gereklilik varsa özelliğini EmitDefaultValue olarak ayarlamanız false gerekir.

Örnek

Aşağıdaki kodda, EmitDefaultValue olarak ayarlanmış birkaç üye false bulunmaktadır.

[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. employeeName için null değer ve employeeID için sıfır değer açıkça serileştirilmiş verilerin bir parçasıdır. Ancak, position, salaryve bonus üyeleri serileştirilmemiştir. Son olarak, targetSalary özelliği EmitDefaultValue olarak ayarlanmış olsa bile, false her zamanki gibi seri hale getirilir, çünkü 57800, sıfır olan bir tamsayının .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 null, sıfır ve null olarak 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. IsRequired olarak ayarlanırsa (bir değerin mevcut olması gerektiğini belirtir) ve trueEmitDefaultValue olarak ayarlanırsa (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

EmitDefaultValue özelliği false olarak ayarlandığında, veri üyelerinin XML Şema Tanım Dili (XSD) şema gösteriminin ayrıntıları Veri Sözleşmesi Şema Referansı'nda ele alınmaktadır. Bununla birlikte, aşağıda kısa bir genel bakış sağlanır:

  • EmitDefaultValue olarak ayarlandığındafalse, ş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 ve nillable ö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ç noktanın sorumluluğundadır.

Şema içeri aktarma işleminde, daha önce bahsedilen WCF'ye özgü ek açıklama algılandığında EmitDefaultValue özelliği otomatik olarak false olarak ayarlanır. ASP.NET Web hizmetleri tüketilirken yaygın olarak ortaya çıkan belirli birlikte çalışabilirlik senaryolarını desteklemek için, özelliği false olarak ayarlanmış başvuru türleri için de nillable olarak ayarlanır.

Ayrıca bakınız