继承枚举时,Xsd.exe生成错误的C#类

时间:2013-04-22 06:10:04

标签: c# xsd xsd.exe

这是一个错误吗?

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:simpleType name="sbrSexItemType">
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="1"/>
                <xsd:enumeration value="2"/>
                <xsd:enumeration value="3"/>
                <xsd:enumeration value="0"/>
            </xsd:restriction>
    </xsd:simpleType>
    <xsd:element name="TestSexItemType1" type="sbrSexItemType"/>
    <xsd:element name="TestSexItemType2" type="sbrSexItemType"/>
</xsd:schema>

我得到了:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlRootAttribute("TestSexItemType1", Namespace="", IsNullable=false)]
public enum sbrSexItemType {

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("1")]
    Item1,

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("2")]
    Item2,

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("3")]
    Item3,

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("0")]
    Item0,
}
这是一种玩笑吗?甚至没有生成错误。生成的代码如何以任何形状或形式表示XSD?

2 个答案:

答案 0 :(得分:1)

当然,可能的值1,2,3,0无法直接转换为枚举值(标识符不能以数字开头),因此xsd在创建标识符时将“Item”放在值之前。 XmlEnumAttribute告诉XmlSerializer在读取或写入Xml文件时应该实际使用哪个值。所以看起来生成的枚举完成了这项工作。

答案 1 :(得分:0)

如果你有其他类型而不是枚举。你应该把枚举放在顶部。我不知道为什么,但我的问题就这样解决了。