2011-02-16 99 views
0

我想在WCF中實現一個restful服務,但是我的問題在於服務無法反序列化傳遞給它的xml。它試圖將根元素映射到操作契約而不是數據契約。例如,用下面的XML包,WCF/RESTful DataContract反序列化問題

<MyObject> 
    <MyField1>asdf</MyField1> 
    <MyField2>1234</MyField2> 
    ... 
</MyObject> 

它無法反序列化MyObject來作爲輸入信息,因爲它期望在該電平的操作的合同。

我不想僅將所有字段用作操作合同的參數,因爲1)將會有超過5個參數,並且2)它不會爲擴展數據留下空間。

我有一個行爲擴展設置爲記錄傳入的請求。我是否應該使用根元素來包裝傳入消息,以便正確反序列化?或者是否有一種不太冒進的方式來完成這項工作 - 不強迫客戶改變實施?

感謝

+0

你可以提供有關正在調用的例外/客戶端及其實現方式的更多詳細信息。 – genericuser 2011-02-16 22:04:37

回答

1

我的解決辦法是我的工作合同改爲

[OperationContract(Action="*")] 
void ProcessMessage(Message message); 

和反序列化使用

var msg = message.GetBody<MyObject>(); 

的消息,我現有的DataContract。

更新:我實際上選擇使用XmlSerializer進行反序列化,因爲它允許調用服務重新排列xml blob中字段的順序。