Soap - Element hat nicht xsi: nil als Eigenschaft, aber Deserialisieren machen nicht das Objekt nicht null

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

Frage

Ich bin ein total Noob, wenn es um Nachrichten XML und SOAP kommt. ... Hier ist die SOAP-Nachricht.

<?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>

Wir erzielen die Klassen mit dem xsd.exe Werkzeug, das uns Klassen zu deserialize zu gab. Diese XSD-Datei von der Firma zur Verfügung gestellt wurde, wir die SOAP-Nachrichten von empfangen.

Hier ist das Problem. Wenn wir diese Art von Antwort zurück von der Firma erhalten, suchen wir innerhalb CSCallbackRequest für diese drei Elemente im Inneren, den CDS, CDRP und UDI. Wir versuchen, welche Art von Rückruf zu bestimmen, wir erhalten. Meine erste Vermutung war, als wir einen XMLSerializer mit Typ verwenden ( generierte Klassentyp ), das Element innerhalb CSCallbackRequest, die nicht die xsi haben: nil = true erlauben würde, das Objekt innerhalb des generierte Klassentypen Objekt würde nicht null sein. Aber dies ist nicht der Fall. Wie kann ich überprüfen, ob eine Eigenschaft mit der nicht das xsi: nil proprerty nach Deserialisieren

War es hilfreich?

Lösung

Eigentlich dachte ich, das Problem aus. Die SOAP-Nachricht, die ich hier setzen ist eigentlich ein Beispiel aus der Dokumentation des Unternehmens. Ich versuche, eine Nachricht dies als Mock-up zu verwenden, die wir erhalten würden. die generierten Klassendateien aus dem XSD Nach einem Vergleich, bemerkte ich, dass der <CS> tatsächlich nicht in den Dateien definiert. Als es Deserialisieren, wäre es nicht, dieses Element finden, also bevöl nichts, da wir Deserialisieren vom <Data> Elemente und darüber hinaus gestartet. Ich überprüfte die anderen Beispiele in der Dokumentation und diejenigen, die nicht dieses zusätzliche <CS> Element haben. Das Entfernen dieses Elements fixiert diese ganze Frage. Ich habe die Firma ihrer Fehler in der Dokumentation informiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top