Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可选属性默认值的XML序列化_C#_.net_Serialization_Xml Serialization_Xsd.exe - Fatal编程技术网

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

C# 可选属性默认值的XML序列化,c#,.net,serialization,xml-serialization,xsd.exe,C#,.net,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.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>
这是它所基于的枚举:

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

    [XmlEnumAttribute("1.1")]
    Version_1_1,
}

有人知道为什么序列化拒绝引入属性吗?

在序列化之前,必须将VersionSpecified标志设置为true。这就是它知道是否要序列化此可选属性的方式。

这是因为您将默认值指定为“1.1”。当属性等于其默认值时,serialiser不会创建元素/属性。

Hi John,在序列化之前正是这样做的。我不需要对序列化程序本身做什么特殊的事情,是吗?请显示用于序列化的代码,不,您不需要做任何其他特殊的事情。您知道是否有任何方法可以强制它用默认值序列化可选属性,其中值在调用serialize之前在代码中显式设置,就像问题中的例子一样?
/// <remarks/>
[GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[Serializable]
public enum Version
{
    [XmlEnumAttribute("1.0")]
    Version_1_0,

    [XmlEnumAttribute("1.1")]
    Version_1_1,
}
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);