【问题标题】:generating serializable cs classes from xsd : which tool use?从 xsd 生成可序列化的 cs 类:使用哪个工具?
【发布时间】: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


【解决方案1】:

看看svcutil。它具有从 xsd 生成类的选项,并且比 xsd.exe 更易于配置。

【讨论】:

    【解决方案2】:

    我们使用LinqToXsd 还有WSCF.blue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多