我们有一个 WSDL,其中包含以下类型定义:
...
<xsd:complexType name="OrderItem">
<xsd:all>
<xsd:element name="source" type="xsd:string" />
</xsd:all>
</xsd:complexType>
<xsd:complexType name="OrderItems">
<xsd:sequence>
<xsd:element name="item" type="tns:OrderItem" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
...
在 VS 2010 中将服务添加为服务引用时,OrderItems
该类包含一个item
类型为OrderItem[]
. 然后生成 SOAP 请求,如下所示:
...
<items>
<OrderItem>
<item>foo</item>
<item>bar</item>
</OrderItem>
</items>
...
使用XmlArray
和XmlArrayItem
属性我们可以分别控制<OrderItem>
和<item>
元素的名称,但不能得到想要的结构:
...
<items>
<item>foo</item>
<item>bar</item>
</items>
...
我知道如果 WSDL 指定了类似的东西而不是无界序列,则可以避免这个问题<xsd:restriction base="soap-enc:Array">
,但鉴于上述情况是使用某些自定义序列化的唯一方法吗?
编辑: https ://gist.github.com/1422704 上的示例 WSDL