2010-07-07 30 views
2

我与剪贴板工作在.net中使用下面的代码为什么这个对象总是从剪贴板为空回来

List<object> templateList = new List<object>(); 
    Clipboard.Clear(); 


Clipboard.SetDataObject(templateList); 
    IDataObject dataObject = Clipboard.GetDataObject(); 
    var x = (List<object>)dataObject.GetData(typeof(List<object>)); 

上面的代码x是你所期望的对象的空List

如果我改变的代码是

List<Template> templateList = new List<Template>(); 
Clipboard.Clear(); 
Clipboard.SetDataObject(templateList); 
IDataObject dataObject = Clipboard.GetDataObject(); 
var x = (List<Template>)dataObject.GetData(typeof(List<Template>)); 

x是现在空

的CLA ss for Template既是公共的,也是可序列化的,并且应用程序在STA线程上运行

任何想法?

回答

1

模板是否有任何未标记为可序列化的对象属性? 换句话说,即使Template被标记为可序列化,你是否已经尝试序列化它,以确认它是否有效?

+0

非属性具有NonSerialized属性,我不认为您实际上需要能够将对象序列化到剪贴板 – 2010-07-07 14:04:25

+0

http://msdn.microsoft.com/en-us/library/cs5ebdfz。 aspx指出,如果你将一个不可序列化的对象传递给Clipboard.SetDataObject,它将失败而不抛出异常。 所以模板必须使用SerializableAttribute和其图中的任何其他类型(http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx)进行标记。 希望这有助于! – barrylloyd 2010-07-07 14:12:24

+0

我可以序列化然后反序列化列表