2015-02-03 1 views
1

Я использую сторонний веб-сервис (из которого я не контролирую) в .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> не сериализуется. Есть ли способ игнорировать неизвестные элементы?

ответ

1

No, xsd:sequence просто означает, что элементы должны быть в порядке. Это атрибут @minOccurs на каждом xs:element, который указывает на необходимость. Когда @minOccurs = 0, элемент не является обязательным. (Обратите внимание, что значения по умолчанию для @minOccurs и @maxOccurs: 1, обозначенные как «обязательные».) Поскольку многие элементы в этой последовательности: @minOccurs = 0, все элементы не обязательно должны присутствовать в вашем ответе.

+0

Спасибо, это верно в контексте моего первоначального вопроса, но, похоже, они возвращают неизвестный элемент как часть своего ответа. Стоит ли вообще игнорировать это? – Nagoh

+0

Если они возвращают ответ, который включает в себя элементы, которые не разрешены в отношении XSD ответа WSDL, то они нарушают контракт интерфейса. Скажите им исправить их код или исправить их XSD. – kjhughes

Смежные вопросы