Soap - элемент не имеет xsi:nil в качестве свойства, но десериализация не делает объект not null

StackOverflow https://stackoverflow.com/questions/3815081

Вопрос

Я полный нуб, когда дело доходит до 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, разрешил бы объект в пределах Сгенерированный Тип класса объект НЕ был бы нулевым.Но это не тот случай.Как мне проверить, не имеет ли свойство с the свойства xsi: nil после десериализации?

Это было полезно?

Решение

На самом деле, я разобрался в этом вопросе.Сообщение SOAP, которое я поместил здесь, на самом деле является примером из документации компании.Я пытался использовать это как макет сообщения, которое мы должны были получить.После сравнения сгенерированных файлов классов из XSD, я заметил, что <CS> на самом деле не был определен в файлах.Когда он выполнял десериализацию, он не находил этот элемент, поэтому ничего не заполнял, поскольку мы начали десериализацию с <Data> стихия и за ее пределами.Я проверил другие примеры в документации, и в них не было этого дополнительного <CS> элемент.Удаление этого элемента устранило всю эту проблему.Я уведомил компанию об их ошибке в документации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top