我正在尝试从XSD文件生成c#代码,并且枚举前面加上单词Item。如何使这个枚举只是数字?所有这一切的要点是有一个枚举,只能使用数字而不使用Min / Max值限制类型。我们不希望这样限制它,因为我们将此XSD分发给客户端并且需要XSD中的注释。我们也喜欢在c#代码中使用枚举。我们可以手动编辑生成的代码,但如果我们可以在xsd中修复它,我就不会疯狂。有什么想法吗?
相关的XSD架构
<xs:simpleType name="DriverActionsCode">
<xs:restriction base="xs:token">
<xs:enumeration value="00" />
<!--No Action-->
<xs:enumeration value="01" />
<!--Exceeded Safe/Posted Speed Limit-->
<xs:enumeration value="02" />
<!--Impeded Traffic-->
<xs:enumeration value="03" />
<!--Failed to Yield ROW-->
<xs:enumeration value="04" />
<!--Disregarded Stop Sign-->
<xs:enumeration value="05" />
<!--Failed to Stop at Signal-->
<xs:enumeration value="06" />
<!--Disregarded Other Device-->
<xs:enumeration value="07" />
<!--Improper Turn-->
<xs:enumeration value="08" />
<!--Turned from Wrong Lane or Position-->
<xs:enumeration value="09" />
<!--Other Improper Turns-->
<xs:enumeration value="10" />
<!--Lane Violation-->
<xs:enumeration value="11" />
<!--Improper Passing on Left-->
<xs:enumeration value="12" />
<!--Improper Passing on Right-->
<xs:enumeration value="13" />
<!--Followed Too Closely-->
<xs:enumeration value="14" />
<!--Improper Backing-->
<xs:enumeration value="15" />
<!--Signaling Violation-->
<xs:enumeration value="16" />
<!--Reckless Driving-->
<xs:enumeration value="17" />
<!--Careless Driving-->
</xs:restriction>
</xs:simpleType>
生成的类
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.18020")]
[System.SerializableAttribute()]
public enum DriverActionsCode
{
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("00")]
Item00,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("01")]
Item01,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("02")]
Item02,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("03")]
Item03,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("04")]
Item04,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("05")]
Item05,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("06")]
Item06,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("07")]
Item07,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("08")]
Item08,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("09")]
Item09,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("10")]
Item10,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("11")]
Item11,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("12")]
Item12,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("13")]
Item13,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("14")]
Item14,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("15")]
Item15,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("16")]
Item16,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("17")]
Item17,
}
答案 0 :(得分:2)
你不能,xsd.exe并不真正支持这些自定义。即使你可以,它也不是有效的C#。
例如,这个枚举不会编译:
enum DriverActionsCode
{
00,
01,
//etc.
}
标识符必须以字符或下划线开头。从C#spec的2.4.2开始:
identifier-start-character:
letter-character
_ (the underscore character U+005F)
但是,如果您的编号从0
开始并且没有间隙(如上例所示),则可以在代码中使用整数并将其强制转换为枚举。
例如:
Int32 codeInApplication = 10;
DriverActionsCode codeForXml = (DriverActionsCode)codeInApplication;
//DriverActionsCode.Item10;