在C#中反序列化来自java web服务的SOAP响应

本文关键字:服务 web SOAP 响应 java 反序列化 | 更新日期: 2023-09-27 18:19:37

我正试图调用一个第三方web服务,该服务是用运行.net framework 4.0的C#构建的组件用java编写的。WSDL位于此处。

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

根据我对该问题的研究,反序列化似乎失败了,因为Project节点返回为<item xsi:type="ns1:Project" xmlns="" xmlns:ns1="http://v3.soap.api.indextools.com">,但代理预期为<Project>

因为代理是在添加服务引用时自动生成的,而且我没有能力更改web服务,所以我很想知道有什么办法可以解决这个问题,让我的代理类正确地反序列化响应。这个问题不仅仅与GetProjects方法有关。我预计服务中的其他方法也会遇到同样的问题,因此希望能在全球范围内解决这一问题。

在C#中反序列化来自java web服务的SOAP响应

也许可以尝试更改项目序列化为的名称:

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

这应该告诉WCF期望<item>而不是<Project>

因为Project是一个生成的分部类,所以应该将其放入自己的.cs文件中。

假设Project扩展了Item,Java SOAP API通常会将所有内容作为基类型返回。你试过类似的东西吗

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

我使用过的几个Java支持的SOAPAPI都需要这样做。