XML序列化可选属性的默认值

Jas*_*son 9 .net c# serialization xml-serialization xsd.exe

我有一组使用xsd.exe构建的类,我正在尝试序列化它们.但是,生成的XML中不包含属性.以下是问题所在的架构的一部分.

<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>
Run Code Online (Sandbox Code Playgroud)

xsd.exe在"Widget"类和另一个名为"VersionSpecified"的属性上生成了一个名为"Version"的属性,但是即使设置为true,这在我序列化时也不会生成属性:

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

[Serialization.XmlIgnoreAttribute]
public bool VersionSpecified { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是它所依据的枚举:

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

    [XmlEnumAttribute("1.1")]
    Version_1_1,
}
Run Code Online (Sandbox Code Playgroud)

根据请求的代码段

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);
Run Code Online (Sandbox Code Playgroud)

有没有人对为什么序列化拒绝引入属性有任何想法?

Ric*_*der 11

这是因为您将默认值指定为"1.1".当属性等于其默认值时,序列化程序不会创建元素/属性.