2014-04-08 40 views
0

我試圖使用SetData命令將XMLNode設置到剪貼板。我得到OutOfMemoryException如何將XmlNode設置爲剪貼板?

如何使XMLNode類可序列化,還是需要手動序列化每個節點,然後在Paste函數中反序列化?

複製功能:

Clipboard.SetData("XmlNode", ouritem); 

粘貼功能:

XmlNode ournode = Clipboard.GetData("XmlNode") as XmlNode; 
+0

到目前爲止您試過的是什麼?你能告訴我們一些代碼嗎? –

+0

當然,我會更新帖子。 – Audio

+1

可能是'XmlNode'對象的循環引用(例如從節點到它的父節點和後節)導致了OutOfMemoryException。如果您只是在剪貼板中放入'ouritem.OuterXml'(它是一個'string')呢? – JLRishe

回答

1

這可能是因爲XmlNode對象的循環引用(例如,從節點到其父和背面)和引用各種其他數據導致OutOfMemoryException。

您可以將剪貼板上作爲一個字符串節點的XML,再後來重建它:

Clipboard.SetData("XmlNode", ouritem.OuterXml); 

粘貼功能:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(Clipboard.GetData("XmlNode") as string); 
XmlNode ournode = doc.DocumentElement; 

當然,這樣的後果之一是,這會導致一個孤立的節點沒有關聯到文檔中包含它的所有其他節點。

+0

謝謝,我用你的答案和答案在這裏:http://stackoverflow.com/questions/3019136/the-node-to-be-inserted-is-from-a-different-document-context完成我的問題 – Audio