我需要定义一些实现第三方xsd定义的类。 xsd非常复杂,有许多限制结束枚举,因此我试图使用xsd.exe和xsd2code节省一些时间。但是,生成的类不考虑minoccurs = 0属性,最糟糕的是,映射到枚举(int)某些类型定义为string。例如,下面的类型被映射为具有相同名称的枚举:
<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,说明必须替换哪个invoce,否则必须省略一块xml。
xsd2code有两个属性来生成代码:GenerateShouldSerialize和GeneratePropertyNameSpecified。将first设置为true没有任何效果,将第二个设置为All会为所有类memmbers生成属性,而不仅仅是minoccurs = 0的属性。
所以问题是: 1.我是否应该更改生成的源以反映我的需求,xsd.exe或xsd2code中缺少一些配置? 2.什么XmlSerializer将写入枚举的xml:枚举值(“1”)或值的字符串表示(IMP00)? 3.还有其他工具可以从xsd构建源代码?
提前感谢您的任何帮助