У нас есть 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">
, а не неограниченную последовательность, но, учитывая вышеизложенное, единственный способ использоватькакая-то пользовательская сериализация?
EDIT : Пример WSDL в https://gist.github.com/1422704