Я абсолютный нуб, когда дело доходит до сообщений XML и SOAP.
... Вот SOAP-сообщение.
<?xml version="1.0" encoding="utf-8" ?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CR>
<Username xmlns="<Hidden>">mtas</Username>
<Password xmlns="<Hidden>">password</Password>
<id xmlns="<Hidden>">
70dad12b-bb50-402d-8b34-
fe2d4c0c283d
</id>
<Data xmlns="<Hidden>">
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="<Hidden>">
<CS>
<CSCallbackRequest xmlns="">
<CDS xsi:nil="true" xmlns="<Hidden>"/>
<CDRP xmlns="<Hidden>"/>
<UDI xsi:nil="true"
xmlns="<Hidden>"/>
</CSCallbackRequest>
</CS>
<Fault xsi:nil="true" />
<Comment xsi:nil="true"/>
</Data>
</Data>
</CR>
</s:Body>
</s:Envelope>
Мы сгенерировали классы с помощью инструмента xsd.exe, который дал нам классы для десериализации. Этот файл .xsd был предоставлен компанией, от которой мы получаем сообщения SOAP.
Вот проблема. Когда мы получаем ответ такого типа от компании, мы ищем в CSCallbackRequest эти три элемента: CDS, CDRP и UDI. Мы пытаемся определить, какой тип обратного вызова мы получаем. Мое первоначальное предположение было, когда мы используем XMLSerializer с типом ( Сгенерированный тип класса ), элемент в CSCallbackRequest, который не имеет xsi: nil = true, позволит объекту в Сгенерированный тип класса объект НЕ будет нулевым. Но это не так. Как проверить, не имеет ли свойство с параметром xsi: nil после десериализации?