剪贴板复制对象和从中复制对象

Jam*_*mes 11 c# clipboard winforms

我试图将一个对象复制到Windows剪贴板上然后再关闭.我的代码是这样的:

复制到剪贴板:

Clipboard.Clear();
DataObject newObject = new DataObject(prompts);
newObject.SetData(myString);
Clipboard.SetDataObject(newObject);
Run Code Online (Sandbox Code Playgroud)

哪里prompts是一个List<Data.Sources.PromptResult>集合.

复制剪贴板:

IDataObject dataObject = System.Windows.Forms.Clipboard.GetDataObject();
if (dataObject.GetDataPresent(typeof(List<Data.Sources.PromptResult>)))
{
  Type type = typeof(List<Data.Sources.PromptResult>);
  Object obj = dataObject.GetData(type);
  return (List<Data.Sources.PromptResult>)dataObject.GetData(type);
}
Run Code Online (Sandbox Code Playgroud)

GetFormats()格式显示在列表中并GetDataPresent(List<Data.Sources.PromptResult>)返回true但如果我尝试将对象从Clipboard类中取出,则GetData(List<Data.Sources.PromptResult>)返回null.

有谁知道什么可能是错的?

Ren*_*iuz 15

好的我尝试将我的用户类型列表添加到剪贴板并将其恢复...这是我尝试过的:

我的用户类:

public class User
{
   public int Age { get; set; }
   public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

其余代码:

// Create User list and add some users
List<User> users = new List<User>();
users.Add(new User { age = 15, name = "Peter" });
users.Add(new User { age = 14, name = "John" });

// Lets say its my data format
string format = "MyUserList";
Clipboard.Clear();

// Set data to clipboard
Clipboard.SetData(format, users);

// Get data from clipboard
List<User> result = null;
if (Clipboard.ContainsData(format))
    result = (List<User>)Clipboard.GetData(format);
Run Code Online (Sandbox Code Playgroud)

......结果是null:) ...直到我把User课程标记为Serializable

[Serializable]
public class User
{ 
    //...   
}
Run Code Online (Sandbox Code Playgroud)

之后我的代码工作了.好吧,这不是答案,但也许它可以帮助你如何.