Clipboard Copying objects to and from

OK I tried to add list of my user type to clipboard and get it back... Here is what I tried:

My User Class:

public class User
{
   public int Age { get; set; }
   public string Name { get; set; }
}

Rest of Code:

// 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);

...and result was null :) ...until I marked User class as Serializable

[Serializable]
public class User
{ 
    //...   
}

After that my code worked. Ok its not the answer but maybe it helps you some how.


@Reniuz thanks for your help it has helped me to work out the answer.

In order to get the text and custom object data out of the Clipboard with multiple formats I have implemented the IDataObject interface in my own class. The code to set the data object must have the copy flag set like this:

Clipboard.Clear();
Clipboard.SetDataObject(myClassThatImplementsIDataObject, true);

To get the data out again the standard text can be retrieved using:

Clipboard.GetText();

The data can be retrieved using the data method:

Clipboard.GetData("name of my class");

The other point that was helpful was to test that the object I was putting into the clipboard could be serialized by using the BinaryFormatter class to perform this test... If an exception is thrown that copying to the clipboard would also fail, but silently.

So my class has:

[Serializable]
public class ClipboardPromptsHolder : IDataObject
{
    ...
}

I had a similar scenario and after marking my class as serializable I got it to work.

So try putting the Serializable attribute on your class Data.Sources.PromptResult.