2013-01-24 61 views
2

我正在開發一個ASP.NET Web API服務,它允許用戶發佈元數據。在Web API數據合同中允許自定義XML

在用戶發佈的數據合同中,他們應該能夠以XML格式發佈自己的自定義元數據。這是一個例子:

<Delivery> 
    <Type>Direct</Type> 
    <Time>12:00:01</Time> 
    <Format>Segmented</Format> 
    <CustomMetadata> 
     <ClientReference>R46375683</ClientReference> 
     <Contact>[email protected]</Contact> 
    </CustomMetadata> 
</Delivery> 

我無法創建成功反序列化正確數據的合同,但是。對於CustomMetadata節點,我有:

[DataMember(EmitDefaultValue=false)] 
public XmlNode CustomMetadata { get; set; } 

當被反序列,我收到一個異常:

「集合型‘System.Xml.XmlNode’不能反序列化,因爲它 沒有一個有效的Add方法,其參數類型爲 'System.Object'。「

我不完全理解爲什麼它試圖向XmlNode「添加」任何東西,但無論出於何種原因,它都失敗了。有沒有其他方法來做這種事情,比如反序列化到另一種類型?我試圖反序列化爲一個字符串,但這也給了一個例外。

回答

2

數據合約序列化僅支持基元和一些特殊類型。您必須使用XmlElement而不是XmlNode。

嘗試:

[DataMemeber] 
public XmlElement CustomMetadata { get; set; } 

http://msdn.microsoft.com/en-us/library/ms733127.aspx

+0

直接點,謝謝!真的認爲我應該能夠自己找到這個,所以-1對我來說是一個糟糕的研究。 –

+0

就像參考一樣,我發現XmlNode []更適合上述示例。使用XmlElement,你必須有一個根元素,但是對於XmlNode [],你可以有幾個元素作爲直接的子元素。 –

1

你能嘗試使用的XmlElement代替XmlNode的?我相信序列化只是反序列化的特例。 XElement也應該工作。