【问题标题】:Problem with generating DataContracts from xsd with svcutil使用 svcutil 从 xsd 生成 DataContract 的问题
【发布时间】:2019-10-23 20:08:33
【问题描述】:

我正在尝试根据我的 xsd 文件生成带有 DataContract 注释的类。然后,这些类应用作我的 Soap Web 服务的交换数据类型。

在 cmd.exe 中我尝试过运行命令:

svcutil /dconly loginSoap.xsd /language:C#

但它失败并出现以下错误:

错误:命名空间“http://www.megatravel.xyz/XMLSchema/XMLSchemaSoap/Login”中的类型“loginRequest”无法导入。根粒子必须是一个序列。要么更改架构,以便类型可以映射到数据协定类型,要么使用 ImportXmlType 或使用不同的序列化程序。

如果您使用 /dataContractOnly 选项导入数据合同类型并收到此错误消息,请考虑改用 xsd.exe。在您的服务合同上应用 XmlSerializerFormatAttribute 属性后,可以在 Windows Communication Foundation 中使用由 xsd.exe 生成的类型。或者,考虑使用 /importXmlTypes 选项将这些类型导入为 XML 类型,以便与服务合同上的 DataContractFormatAttribute 属性一起使用。

我的 xsd 文件是:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.megatravel.xyz/XMLSchema/XMLSchemaSoap/Login"
           targetNamespace="http://www.megatravel.xyz/XMLSchema/XMLSchemaSoap/Login"
           elementFormDefault="qualified">
    <xs:element name="loginRequest">
        <xs:complexType>
            <xs:all>
                <xs:element name="username" type="xs:string"/>
                <xs:element name="password" type="xs:string"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="loginResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="message" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

【问题讨论】:

    标签: c# soap xsd datacontract svcutil.exe


    【解决方案1】:

    错误为您指明了正确的方向。

    只需将&lt;xs:all&gt; 替换为&lt;xs:sequence&gt;

    或将 XSD.exe 与 /classes 一起使用

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2020-10-27
      • 2014-04-25
      相关资源
      最近更新 更多