2010-07-07 68 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

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