C# 从剪贴板粘贴对象时出错

C# 从剪贴板粘贴对象时出错,c#,.net,entity-framework,clipboard,C#,.net,Entity Framework,Clipboard,这是我用于将对象复制和粘贴到剪贴板的代码: private void CopyObject() { Clipboard.SetData(ClipboardDataFormats.SampleData, this.SelectedSampleObject); } private void PasteObject() { if (Clipboard.ContainsData(ClipboardDataFormats.SampleData) == true) {

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

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
    }
}
我打电话时收到以下异常情况

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

HRESULT0x800401D3(CLIPBRD\u E\u BAD\u数据)


错误的原因可能是调用时,
SelectedSampleObject
是实体框架代理对象。这可能吗?你还有别的想法吗?不幸的是,我真的不理解这个异常。

不确定这个特定的异常,但您的代码无论如何都不能与EF代理对象一起工作,因为您放在剪贴板上的对象必须是可序列化的(例如,标记有
可序列化的
属性),而EF代理类则不是。当然,您可以禁用代理创建,并使用
[serialable]
标记所有实体类,但我怀疑您是否希望这样做。相反,创建另一个仅具有必需属性的类,将其标记为Serialable,并将其用于剪贴板操作。或者自己将对象序列化为json\xml,并将其设置为剪贴板。

谢谢,先生。我要试试看!“相反,创建另一个仅具有所需属性的类,并将其标记为可序列化”,这很有用,特别是如果您不能完全控制继承树(通常您必须将所有类标记为可序列化,直到基本类,例如.NET Framework的一部分)