转换为 C# 对象时基于字符串的枚举中的 Value 属性
当我在包含此片段的 xsd 文件上使用 xsd.exe 时:
<xsd:simpleType name="Primes">
<xsd:restriction base="xsd:string">
<xsd:length value="3"/>
<xsd:enumeration value="2" />
<xsd:enumeration value="3" />
<xsd:enumeration value="5" />
<xsd:enumeration value="7" />
<xsd:enumeration value="11" />
<xsd:enumeration value="13" />
<xsd:enumeration value="17" />
</xsd:restriction>
</xsd:simpleType>
生成以下枚举类型:
public enum Primes {
[System.Xml.Serialization.XmlEnumAttribute("2")]
Item2,
[System.Xml.Serialization.XmlEnumAttribute("3")]
Item3,
[System.Xml.Serialization.XmlEnumAttribute("5")]
Item5,
[System.Xml.Serialization.XmlEnumAttribute("7")]
Item7,
[System.Xml.Serialization.XmlEnumAttribute("11")]
Item11,
[System.Xml.Serialization.XmlEnumAttribute("13")]
Item13,
[System.Xml.Serialization.XmlEnumAttribute("17")]
Item17,
}
但是当我验证 XMl 时,它会生成错误消息:
{“实例验证错误:‘17’不是 Primes 的有效值."}
可能是因为她正在等待值“Item17”。那么我如何选择值 17 而不是 Item17 ?
仅将 Item17 更改为 17 是行不通的
when i use xsd.exe on xsd file which contains this piece:
<xsd:simpleType name="Primes">
<xsd:restriction base="xsd:string">
<xsd:length value="3"/>
<xsd:enumeration value="2" />
<xsd:enumeration value="3" />
<xsd:enumeration value="5" />
<xsd:enumeration value="7" />
<xsd:enumeration value="11" />
<xsd:enumeration value="13" />
<xsd:enumeration value="17" />
</xsd:restriction>
</xsd:simpleType>
The following enum type is produced:
public enum Primes {
[System.Xml.Serialization.XmlEnumAttribute("2")]
Item2,
[System.Xml.Serialization.XmlEnumAttribute("3")]
Item3,
[System.Xml.Serialization.XmlEnumAttribute("5")]
Item5,
[System.Xml.Serialization.XmlEnumAttribute("7")]
Item7,
[System.Xml.Serialization.XmlEnumAttribute("11")]
Item11,
[System.Xml.Serialization.XmlEnumAttribute("13")]
Item13,
[System.Xml.Serialization.XmlEnumAttribute("17")]
Item17,
}
But when i'm validating XMl, it generates error message:
{"Instance validation error: '17' is not a valid value for Primes."}
Probably because she is waiting for the value "Item17" instead. So how can i pick a value of 17 instead of Item17 ?
It won't work just changing Item17 to 17
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这里的问题是您尝试对 C#
enum
值使用非法标识符。这是不合法的,也是您问题的根源。这里的简单修复是使枚举的值在 XML 和 C# 代码中成为合法的 C# 标识符。例如,在任何地方使用Item17
而不是17
。然后编写一个辅助函数将enum
值转换为您想要的数字The problem here is you are trying to use an illegal identifier for a C#
enum
value. This isn't legal and is the source of your problems here. The simple fix here is to make the values of the enumeration legal C# identifiers in the XML and C# code. For example useItem17
everywhere and not17
. Then write a helper function to convert from theenum
values to the numeric ones you desire好的找到了解决方案:
只要给项目一个正确的值:
我相信他是更好的解决方案,因为这样你就可以在“客户端”端以与普通枚举相同的方式使用枚举。例如:
考虑一下,当您使用 xsd.exe 从 xsd 创建 C# 对象时,默认情况下这是处理 xml 中整数枚举类型的方式。
Ok found the solution:
Just give the items a correct value:
I belive that his is better solution because then you can use the enums in the "client" side in a same way as normal enums. For example:
Consider that when you create a C# object from xsd with xsd.exe, this is by default how the handle integers enum types in xml.