【发布时间】: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