WCF序列化从JAX WS到空对象的响应 - 可能的命名空间问题?

时间:2012-02-22 01:51:32

标签: wcf jax-ws

我正在使用WCF客户端来调用JAX Web服务。

响应被反序列化时,响应对象中的数组始终为空。但是,如果我使用消息检查器手动将命名空间添加到响应中的数组类型,则会正确反序列化响应。

所以我得到的回应是:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
  <S:Body>
    <ns2:myResponse xmlns:ns2="http://mynamespace.com/">
      <myArray>
        <myObject>
          <myString>abcde</myString>
          <myInt>12345</myInt>
        </myObject>
      </myArray>
    <id>7777</id>
  </ns2:myResponse>
  </S:Body>
</S:Envelope>

这将生成一个myResponse类型的对象,其中包含正确的'id'字段,但myArray字段的myObject类型为空数组。

当我手动编辑收到的消息以在myObject标记之前添加命名空间别名“ns2”时,它看起来像这样:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
  <S:Body>
    <ns2:myResponse xmlns:ns2="http://mynamespace.com/">
      <myArray>
        <ns2:myObject>
          <myString>abcde</myString>
          <myInt>12345</myInt>
        </ns2:myObject>
      </myArray>
    <id>7777</id>
  </ns2:myResponse>
  </S:Body>
</S:Envelope>

正确的对象被反序列化,即大小为1的myArray包含正确的myObject。

任何人都可以告诉我为什么会这样,以及如何在没有人工干预的情况下让WCF反序列化正常工作?

1 个答案:

答案 0 :(得分:1)

不确定这是不是您的问题,但可能值得一试。

我们遇到了类似的问题。在我们的例子中,有一个复杂的对象被反序列化,缺少几个字段。使用调试器,我们可以看到信息存在。但是我们无法通过代码来实现它。

对我们有用的是将对象转换为包含所有字段的类型。

检查您的references.cs文件,在那里定义了哪些数据类型?