【发布时间】:2011-06-03 09:43:41
【问题描述】:
我需要定义一些实现第三方 xsd 定义的类。 xsd 相当复杂,有很多限制结束枚举,因此我尝试使用 xsd.exe 和 xsd2code 节省一点时间。然而,生成的类不考虑 minoccurs=0 属性,最糟糕的是,映射到枚举(int)某些类型定义为字符串。例如下面的类型被映射为同名的枚举:
<xsd:element name="CodiceFornitura">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="IMP00"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public enum CodiceFornitura
{
/// <remarks/>
IMP00,
}
另一个问题是某些元素可能会被序列化:例如,如果我要发送一种类型的文档(比如 OriginalInvoiceUpdate),我必须添加一段 xml,说明必须替换哪个调用,否则必须省略一段 xml。
xsd2code 有两个属性来生成代码:GenerateShouldSerialize 和 GeneratePropertyNameSpecified。将第一个设置为 true 没有任何效果,将第二个设置为 All 会生成所有类成员的属性,而不仅仅是 minoccurs=0 的那些。
所以问题是: 1. 我是否应该更改生成的源以反映我的需求,xsd.exe 或 xsd2code 缺少一些配置? 2. XmlSerializer 将在枚举的 xml 中写入什么:枚举值(“1”)或值的字符串表示(IMP00)? 3. 还有其他工具可以从 xsd 构建源代码吗?
提前感谢您的帮助
【问题讨论】:
-
您当然可以将 XML Schema 读入内存,并生成您自己的代码。
标签: c# xmlserializer