2010-08-05 15 views
9

xsd.exe aracılığındaki bir dizi sınıf yapıyorum ve bunları serileştirmeye çalışıyorum. Ancak, ortaya çıkan XML'de bir özellik bulunmuyor. İşte problemin bulunduğu şemanın bir parçası.XML İsteğe bağlı özniteliklerin varsayılan değerlerinin seri hale getirilmesi

<xsd:element name="Widget"> 
    <xsd:complexType> 
     /* sequence removed for brevity */ 
     <xsd:attribute name="Version" type="Version" use="optional" default="1.1"/> 
    </xsd:complexType> 
</xsd:element> 
<xsd:simpleType name="Version"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="1.0"/> 
     <xsd:enumeration value="1.1"/> 
    </xsd:restriction> 
</xsd:simpleType> 

xsd.exe bir "Widget" sınıfı ve "VersionSpecified" adlı başka mülkiyet "Sürüm" adlı bir özellik oluşturulan, ama gerçek ayarlandığında bu ben bile serialize özniteliği oluşturmak için görünmez:

[XmlAttributeAttribute] 
[DefaultValueAttribute(Version.Version_1_1)] 
public Version Version { get; set; } 

[Serialization.XmlIgnoreAttribute] 
public bool VersionSpecified { get; set; } 

Ve bu dayandığı saymaktır:

/// <remarks/> 
[GeneratedCodeAttribute("xsd", "2.0.50727.3038")] 
[Serializable] 
public enum Version 
{ 
    [XmlEnumAttribute("1.0")] 
    Version_1_0, 

    [XmlEnumAttribute("1.1")] 
    Version_1_1, 
} 

Kod pasajı talebin uygun olarak

Widget widget = new Widget(); 
widget.Version = Version.Version_1_1; 
widget.VersionSpecified = true;  

XmlSerializer serializer = new XmlSerializer(widget.GetType()); 
serializer.Serialize(/*Memory Stream object*/, widget); 

Serileştirmenin neden özniteliği sunmayı reddettiği konusunda herhangi bir fikri var mı?

cevap

11

Varsayılan değeri "1.1" olarak belirttiğiniz için. Mülk, özellik varsayılan değerine eşit olduğunda, element/özellik oluşturmaz.

+0

İyi yakalama. Onu özledim. –

+1

İsteğe bağlı bir özniteliği varsayılan bir değere serileştirmek için zorlamak için herhangi bir yol var mıdır, buradaki örnekte olduğu gibi, seri hale getirilmeden önce değerin açıkça kodda ayarlandığı yer var mı? – Zack

0

Serialize edilmeden önce VersionSpecified bayrağını true olarak ayarlamanız gerekir. Bu isteğe bağlı özniteliğin serileştirilip geçirilmeyeceği böyle biliniyor.

+0

Merhaba John, serileştirmeden hemen önce bunu yapıyor. Seri hale getiriciye yapmam gereken özel bir şey yok, değil mi? – Jason

+0

Lütfen serileştirme için kullandığınız kodu gösterin ve hayır, özel bir şey yapmanız gerekmiyor. –

+0

İsteğinize göre kod snippet'ini eklendi. – Jason

İlgili konular