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 nullve 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 EmitDefaultValuefalsesahiptir.

[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, salaryve bonus üyeleri serileştirilmemiştir. Son olarak, targetSalary özelliği olarak ayarlanmış falseolsa 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 nullolarak nullyorumlayabilir. Üçü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 IsRequiredfalse (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ığı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ç 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.falsefalse

Ayrıca bkz.