C# XSD.exe忽略简单的复杂类型

C# XSD.exe忽略简单的复杂类型,c#,wcf,xsd,xsd.exe,C#,Wcf,Xsd,Xsd.exe,我们有一个大型wcf服务和一个大型xsd文档,其中包含多个元素和复杂类型。我们使用xsd.exe生成代码,并在WCF服务的ServiceContract上使用XmlSerializerFormat再次序列化这些对象 现在,xsd.exe和字符串数组的定义出现了问题 我们定义了以下元素 <xs:element name="Configuration" type="Configuration"/> <xs:complexType name="Configuration">

我们有一个大型wcf服务和一个大型xsd文档,其中包含多个元素和复杂类型。我们使用xsd.exe生成代码,并在WCF服务的ServiceContract上使用XmlSerializerFormat再次序列化这些对象

现在,xsd.exe和字符串数组的定义出现了问题

我们定义了以下元素

<xs:element name="Configuration" type="Configuration"/>
<xs:complexType name="Configuration">
    <xs:sequence>
    <xs:element name="Name" type="xs:string"/>
    <xs:element name="Parameters" type="Parameters" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Parameters">
     <xs:sequence>
    <xs:element name="Parameter" type="xs:string" maxOccurs="unbounded"/>
      </xs:sequence>
  </xs:complexType>
这将导致:

 /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://mynamespace.com/")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace="http://mynamespace.com/", IsNullable=false)]
    public partial class Configuration {

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string Name;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        [System.Xml.Serialization.XmlArrayItemAttribute("Parameter", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
        public string[] Parameters;
    }
如您所见,xsd.exe工具足够智能,可以查看complextype参数,因此它将其设置为字符串[]

问题是,如果我们在WCF服务中使用它,它将创建ArrayOfString complextypes,而不是我们的Parameters复杂类型。更糟糕的是,我们有几个字符串[]导致ArrayOfString1、ArrayOfString2、ArrayOfString3等等


问题是:我们如何避免XSD使参数complextype平坦化?

这是一个XSD文件,而不是wsdl文件;,因此wsdl.exe不会生成代码。您可以尝试xsd2code.codeplex.com,它提供诸如获取列表而不是数组之类的选项,这可能会对您有所帮助。