我們具有包含下述類型定義一個WSDL:.NET SOAP序列化無界序列
...
<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>
...
當添加服務爲在2010年VS服務引用,所述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">
而不是無限序列,但是考慮到以上是使用某些自定義序列化的唯一方法,可以避免此問題?
編輯:示例WSDL在https://gist.github.com/1422704
你還可以發佈消息的輸出類型中引用的元素的定義嗎? –
是否正確無法更改Web服務和wsdl,並且您試圖通過操作客戶端類的XML序列化屬性來調整請求XML? –
是的,WSDL是給出的,我們理想地使用帶有一些自定義序列化的Service Reference生成的類來產生所需的輸出。 – cmbuckley