2012-01-05 179 views
2

我试图调用第三方的web服务,它是用运行.net framework 4.0的C#构建的组件编写的。 WSDL位于here从C#中的java web服务反序列化SOAP响应

我遇到的问题是我的C#代理类不会正确反序列化来自GetProjects方法的响应,因为它为Project生成一个类,但响应中不包含映射到Project的元素,而是一个“项目“元素在xsi:type属性中指定。

从我对这个问题的研究中可以看出,反序列化失败了,因为Project节点回来的时候是<item xsi:type="ns1:Project" xmlns="" xmlns:ns1="http://v3.soap.api.indextools.com">,但代理的期望值是<Project>

由于代理是在添加服务引用时自动生成的,并且因为我无法更改Web服务,所以我很好奇任何解决此问题的方法,以便正确解序列化我的代理类响应。此问题不是孤立于GetProjects方法。我希望在服务中遇到与其他方法相同的问题,因此我们将赞赏全球解决此问题的方法。

回答

0

假设Project扩展Item Java SOAP API通常会将所有内容作为基本类型返回。你有没有尝试过这样的事情:

var item = proxy.GetProjects(...); 
var project = item as Project; 

我曾经使用过的几个Java支持的SOAP API需要这个。

+0

我相信当代理调用方法时,他会得到一个错误。不是在试图解析代理结果时。 – Ernesto 2012-01-05 17:57:33

2

也许尝试更改名称,项目序列化为:

[DataContract(Name="item")] 
public partial class Project { } 

这应该告诉WCF期待<item>而非<Project>

由于Project是生成的部分类,因此应将其放入其自己的.cs文件中。

+0

+1伟大的解决方案,完美的使用部分。 – Craig 2012-01-05 18:03:36