从剪贴板粘贴对象时出现错误。

3

这是我用于复制粘贴对象到剪贴板的代码:

private void CopyObject()
{
    Clipboard.SetData(ClipboardDataFormats.SampleData, this.SelectedSampleObject);
}

private void PasteObject()
{
    if (Clipboard.ContainsData(ClipboardDataFormats.SampleData) == true)
    {
        var sampleObject = (SampleClass)Clipboard.GetData(ClipboardDataFormats.SampleData); // exception
    }
}

我调用Clipboard.GetData()时出现以下异常:

System.Runtime.InteropServices.COMException 剪贴板上的数据无效。

HRESULT 0x800401D3 (CLIPBRD_E_BAD_DATA)

可能错误的原因是在调用Clipboard.SetData()时,SelectedSampleObject是一个实体框架代理对象。这种情况是否有可能?您有什么其他想法吗?很遗憾我真的不理解这个异常。
1个回答

2

我不确定这个特定的异常,但是你的代码无论如何都无法处理EF代理对象,因为你放入剪贴板的对象必须是可序列化的(例如标记为Serializable属性),而EF代理类则不是。当然,你可以禁用代理创建,并将所有实体类都标记为[Serializable],但我怀疑你不想这样做。相反,创建另一个仅包含所需属性的类,将其标记为Serializable并将其用于剪贴板操作。或者自己将对象序列化为json\xml等格式,并将其设置到剪贴板中。


谢谢您先生。我会尝试一下! - ˈvɔlə
相反,创建另一个仅具有所需属性的类,并将其标记为Serializable是很有用的,特别是如果您无法完全控制继承树(通常您必须将所有类标记为可序列化,直到基类,这可能是例如.NET Framework的一部分)。 - Francesco B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接