2012-01-05 95 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