Svcutil不会生成所有类

时间:2019-02-21 10:03:54

标签: c# .net xml wcf svcutil.exe

我想调用一个我想为其生成代理类的外部SOAP服务。 .wsdl不会在线公开,而是与一组.xsd文件一起提供。然后,我使用svcutil(也与dotnet-svcutil 1.0.4一起尝试过)来生成类。考虑以下XML:

<xs:complexType name = "ValidationReply" abstract="false">
  <xs:complexContent>
    <xs:extension base="common:Reply">
      <xs:sequence>
        <xs:element name="data" type="ns:ValidationReplyData" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>
<xs:complexType name="ValidationReplyData" abstract="false">
  <xs:sequence>
    <xs:element name="errors" type="ns:Error" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

生成以下代码:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.4")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="Namespace")]
public partial class ValidationReply: Reply
{

    private Error[] dataField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
    [System.Xml.Serialization.XmlArrayItemAttribute("errors", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
    public Error[] data
    {
        get
        {
            return this.dataField;
        }
        set
        {
            this.dataField = value;
        }
    }
}

问题是XML定义了一个包含错误列表的内部类型,其中Svcutil将错误列表直接放置为数据字段,而不是将数据字段设置为ValidationReplyData类型。根本不会生成ValidationReplyData。

代码可以编译,没有任何问题,而且我能够正确地调用外部服务。但是,数据字段始终为null,因为响应的格式为:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <fl:ValidationReply xmlns:fw="Namespace" >
      <data>
        <errors>
          <code>236</code>
        </errors>
        <errors>
          <code>237</code>
        </errors>
      </data>
    </fl:ValidationReply>
  </S:Body>
</S:Envelope>

没有正确反序列化生成的类。

简而言之,有人知道如何强制Svcutil生成所有类吗?是否冗余。

我简化了xml代码段,因此示例中可能存在一些不一致之处,但是问题的摘要是缺少的ValidationReplyData类-

0 个答案:

没有答案