2011-03-21 25 views
29

böyle, [DataContract] ve [DataMember] özelliklerini kullanarak bir sözleşme tanımlayabilirsiniz:[DataMember (EmitDefaultValue = false)] neden kullanılmıyor? WCF içinde

snippet

Ancak, ben kullanmak ister:

[DataContract] 
public class Sample 
{ 
    [DataMember(EmitDefaultValue = false, IsRequired = false)] 
    public string Test { get; set; } 
} 

This article on the MSDNEmitDefaultValue = false kullanılarak tavsiye edilmez olduğunu belirtmektedir Bu, bu yapı kullanılarak oluşturulan XML daha temiz olduğu için.

<Sample> 
</Sample> 

Ben raporumu arkasındaki mantık nedir merak ediyorum: hiçbir değer olduğunda ommited edilir ayar elemanı kullanırken

<Sample> 
    <Test xsi:nil="true"/> 
</Sample> 

: Bu ayar sonuçları belirten Değil. Özellikle, her iki snippti de bana benzediğinden (ve son bölüm de bu sözleşme için doğru şekilde serpiştirilebilir).

Bu ifadenin arkasındaki mantık nedir?

cevap

21

Nedeni, bağlandığınız makalenin alt kısmında yer alır. Kısa versiyonu: EmitDefaultValue false olarak ayarlanır

  • , Windows Communication Foundation (WCF) özel bir ek açıklama olarak şemada temsil edilir. Bu bilgiyi temsil etmek için birlikte çalışabilir bir yol yoktur. Özellikle, şemadaki "varsayılan" özniteliği bu amaçla kullanılmaz, minOccurs özniteliği yalnızca IsRequired ayarından etkilenir ve nillable özniteliği yalnızca veri üyesinin türünden etkilenir.

  • Kullanılacak gerçek varsayılan değer şemada mevcut değil. Eksik bir unsuru uygun şekilde yorumlamak için alıcı son noktaya kalmış.

+3

Bunun önemli bir kısmı, karşılıklı sorun olarak görünüyor. Aramanın her iki tarafında da .net teknolojisini kullanırsanız ve güçlü bir şekilde yazdığınız veri sözleşmelerinde sorun yaşamazsınız. – Gent

İlgili konular