У меня есть XSD, и я использовал инструмент xsd.exe для создания классов c #. В веб-сервисе я принимаю в MessageContract экземпляр одного из этих созданных объектов.
Соответствующая часть xsd к этому вопросу находится здесь:
<xs:element name="Tasks">
<xs:complexType>
<xs:sequence>
<xs:element ref="Task" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Task"> ... </xs:element>
XSD создал это:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Tasks {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Task")]
public Task[] Task;
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Task { ... }
SOAPUI создал запрос мыла из WSDL, который выглядит следующим образом:
<Tasks>
<Task>
<Task>
.. task data here
</Task>
</Task>
</Tasks>
обратите внимание на дополнительный элемент-обертку. При попытке выполнить этот запрос мыла, я получаю ошибку десериализации: Ошибка в строке x, позиция y: «Элемент» «WWW» из пространства имен «ZZZ» не ожидается. Ожидаемый элемент 'SSS'
После нахождения постороннего узла в сгенерированном SOAP-запросе мой новый запрос выглядел так:
<Tasks>
<Task>
...task data here
</Task>
</Task>
Теперь десериализатор «работает», но в моем методе объект Tasks содержит пустой массив Task.
Итак, мой вопрос: почему автоматический генератор запросов создает объект-задачу-обертку и почему при его удалении я получаю пустой массив в своем объекте-задаче?