从剪贴板粘贴对象时出错

时间:2017-12-07 11:54:53

标签: c# .net entity-framework clipboard

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

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 个答案:

答案 0 :(得分:2)

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