如何将XmlNode设置为剪贴板?

时间:2014-04-08 10:49:34

标签: c#

我尝试使用XMLNode命令将SetData设置为剪贴板。我得到了OutOfMemoryException

如何使XMLNode类可序列化,或者我是否需要手动序列化每个节点然后在粘贴功能中反序列化?

复制功能:

Clipboard.SetData("XmlNode", ouritem);

粘贴功能:

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

1 个答案:

答案 0 :(得分:1)

可能是XmlNode对象的循环引用(例如从节点到其父节点和返回节点)以及对各种其他数据的引用都会导致OutOfMemoryException。

您可以将节点的XML作为字符串放在剪贴板上,然后再重新构建它:

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

粘贴功能:

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

当然,这样做的一个结果是,这会导致一个孤立的节点,而不会与包含它的文档中的其他所有节点相关联。