从 xsd 生成可序列化的 cs 类:使用哪个工具?
我需要定义一些实现第三方 xsd 定义的类。 xsd 相当复杂,有很多限制结束枚举,因此我尝试使用 xsd.exe 和 xsd2code 来节省一些时间。然而,生成的类不考虑 minoccurrs=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 会生成所有类成员的属性,而不仅仅是 minoccurrs=0 的类成员。
所以问题是: 1.我是否应该更改生成的源以反映我的需求,xsd.exe 或 xsd2code 缺少一些配置? 2. XmlSerializer 将在枚举的 xml 中写入什么:枚举值(“1”)或值的字符串表示形式(IMP00)? 3. 还有其他工具可以从 xsd 构建源代码吗?
预先感谢您的帮助
i need to define some classes that implement a third party xsd definitions . The xsd is quite complex , with a lot of restrictions end enumerations, Therefore i've tried to save a bit of time using xsd.exe and xsd2code. However generated classes don't take into account the minoccurs=0 attribute and , worst, maps to an enum (int) some types defined as string. For example the type below is mapped as an enumeration with the same name :
<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,
}
The other problem is that some element migth or might not be serialized :for example if i'm sending a type of document (say OriginalInvoiceUpdate), i must add a piece of xml that states which invoce has to be replaced otherwise that piece of xml must be omitted.
xsd2code has two properties to generate code : GenerateShouldSerialize and GeneratePropertyNameSpecified. Setting the first to true don't have any effect, setting the second to All generates the properties for all class memmbers , not only for thats with minoccurs=0.
So the questions are :
1. shall i change the generated sources to reflect my needs, there are some configurations i'm missing with xsd.exe or xsd2code ?
2. what XmlSerializer will write into the xml for enums : the enumeration value ("1") or the string representation of the value (IMP00) ?
3. there are other tools to build sources from xsd ?
thank you in advance for any help
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
查看 svcutil。它具有从 xsd 生成类的选项,并且比 xsd.exe 更易于配置。
Have a look at svcutil. It has options to generate classes from xsd and is a lot more configurable than xsd.exe.
我们使用 LinqToXsd
以及 WSCF.blue
We use LinqToXsd
And WSCF.blue