Я использую сторонний веб-сервис (из которого я не контролирую) в .NET.Игнорирование порядка последовательности XSD при сериализации в .NET
Я заметил, что некоторая моих свойств не была установлена, когда ответ возвращался и был сериализован из службы.
Я заметил что-то странное с их ответом.
Это образец их WSDL
<xs:complexType name="letters">
<xs:complexContent>
<xs:extension base="tns:response">
<xs:sequence>
<xs:element name="a" type="xs:long" />
<xs:element minOccurs="0" name="b" type="xs:dateTime" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="c" nillable="true" type="tns:anotherComplexType" />
<xs:element minOccurs="0" name="d" type="xs:dateTime" />
<xs:element minOccurs="0" name="e" type="tns:string" />
<xs:element minOccurs="0" name="f" type="tns:boolean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
И это образец соответствующей части ответа:
<letters>
<a>0</a>
<b>2015-02-03T11:59:18+11:00</b>
<d>2015-02-03T12:00:00+11:00</d>
<f>true</f>
</letters>
Я подозреваю, что, поскольку они являются определяющими в <xs:sequence>
для элементов в части <letters>
, что .NET Serializer ожидает, что ответ будет иметь ВСЕ элементов, присутствующих в ответе? (И, таким образом, их ответ нарушает их определение WSDL?).
Благодаря
EDIT Представляется, что ответ возвращается неизвестный элемент, в частности,
<letters>
<a>0</a>
<b>2015-02-03T11:59:18+11:00</b>
<d>2015-02-03T12:00:00+11:00</d>
<otherElement>blue</otherElement>
<f>true</f>
</letters>
который не является частью WSDL. Это означает, что элемент <f>
не сериализуется. Есть ли способ игнорировать неизвестные элементы?
Спасибо, это верно в контексте моего первоначального вопроса, но, похоже, они возвращают неизвестный элемент как часть своего ответа. Стоит ли вообще игнорировать это? – Nagoh
Если они возвращают ответ, который включает в себя элементы, которые не разрешены в отношении XSD ответа WSDL, то они нарушают контракт интерфейса. Скажите им исправить их код или исправить их XSD. – kjhughes