2010-09-28 22 views
1

对于XML和SOAP消息,我是一个总的noob。 ...这是SOAP消息。肥皂 - 元素没有xsi:nil作为属性,但反序列化不会使对象不为空

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

+0

在模式中CSCallbackRequest和CDS/CDRP/UDI元素是如何定义的? – superfell 2010-09-29 03:07:48

回答

0

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

相关问题