我正在尝试使用运行.net framework 4.0的C#构建的组件调用用java编写的第三方Web服务。 WSDL位于here。
我遇到的问题是我的C#代理类不会正确地反序列化来自GetProjects方法的响应,因为它为Project生成一个类,但响应不包含映射到Project的元素,而是一个“项目“在xsi:type属性中指定了Project的元素。
根据我对该问题的研究,反序列化似乎失败了,因为Project节点以<item xsi:type="ns1:Project" xmlns="" xmlns:ns1="http://v3.soap.api.indextools.com">
的形式返回,但代理期待<Project>
。
因为代理是在添加服务引用时自动生成的,并且因为我无法更改Web服务,所以我很好奇这个问题的任何解决方法是让我的代理类正确地反序列化响应。此问题不仅仅与GetProjects方法隔离。我希望在服务中遇到与其他方法相同的问题,因此我们希望能够全面解决这个问题。
答案 0 :(得分:2)
也许尝试更改Project序列化的名称:
[DataContract(Name="item")]
public partial class Project { }
这应该告诉WCF期望<item>
而不是<Project>
。
因为Project
是生成的部分类,所以应该将它放入自己的.cs文件中。
答案 1 :(得分:0)
假设Project
扩展Item
,Java SOAP API通常会将所有内容作为基类返回。你尝试过类似的东西吗?
var item = proxy.GetProjects(...);
var project = item as Project;
我使用过的几个Java支持的SOAP API需要这个。