1

谈到 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。我们正在尝试确定我们正在接收哪种类型的回调。我最初的假设是,当我们使用类型为(Generated Class Type)的 XMLSerializer 时,CSCallbackRequest 中没有 xsi:nil=true 的元素将允许Generated Class Type对象中的对象不为空。但事实并非如此。如何在反序列化后检查具有 的属性是否没有 xsi:nil 属性?

4

1 回答 1

0

其实,我想通了这个问题。我放在这里的 SOAP 消息实际上是公司文档中的一个示例。我试图将其用作我们将收到的消息的模型。在比较了从 XSD 生成的类文件后,我注意到<CS>文件中实际上并没有定义。当它反序列化时,它找不到那个元素,因此什么也不填充,因为我们开始反序列化<Data>元素和其他元素。我检查了文档中的其他示例,这些示例没有这个额外的<CS>元素。删除该元素解决了整个问题。我已经通知公司他们在文件中的错误。

于 2010-09-29T18:21:25.067 回答