这是我将对象复制并粘贴到剪贴板的代码:
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 剪贴板上的数据无效。
HRESULT 0x800401D3(CLIPBRD_E_BAD_DATA)
在调用Clipboard.SetData()
时,错误的原因可能是SelectedSampleObject
是实体框架代理对象。这可能吗?你还有其他想法吗?不幸的是,我真的不明白这个例外。
答案 0 :(得分:2)
不确定此特定异常,但您的代码无论如何都无法使用EF代理对象,因为放入剪贴板的对象必须是可序列化的(例如标有Serializable
属性),而EF代理类不是。您当然可以禁用代理创建并使用[Serialiable]
标记所有实体类,但我怀疑您是否想要这样做。相反,创建一个只有必需属性的另一个类,用Serialiable标记它并将其用于剪贴板操作。或者将你的对象序列化为json \ xml,并将其设置为剪贴板。