WCF序列化JAX WS对空对象的响应-可能的命名空间问题?
我正在使用WCF客户端调用JAX web服务 当响应被反序列化时,响应对象中的数组总是空的。但是,如果我使用消息检查器将名称空间手动添加到响应中的数组类型,则响应将正确反序列化 因此,我得到的答复是:WCF序列化JAX WS对空对象的响应-可能的命名空间问题?,wcf,jax-ws,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: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>
abcde
12345
7777
这将生成一个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>
abcde
12345
7777
正确的对象是反序列化的,即大小为1的myArray包含正确的myObject
有人能告诉我为什么会这样,以及我如何在没有手动干预的情况下使WCF反序列化正确工作吗?不确定这是否正是您的问题,但可能值得一试 我们也有类似的问题。在我们的例子中,有一个复杂的对象正在被反序列化,缺少几个字段。使用调试器,我们可以看到信息就在那里。但我们无法通过密码找到它 对我们来说,有效的方法是将对象强制转换为包含所有字段的类型
检查references.cs文件,其中定义了哪些数据类型 是reference.cs中定义的类型包含所有Nessery字段。所有字段实际上都没有丢失,即没有任何字段为空。数组字段的类型正确,但当它应该包含一项时,它是空的。感谢您的回答,很遗憾,它没有解决问题。