从xsd生成可序列化的cs类:哪个工具使用?

时间:2011-01-04 13:24:43

标签: c# xmlserializer

我需要定义一些实现第三方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构建源代码?

提前感谢您的任何帮助

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我们使用LinqToXsdWSCF.blue