为了支持我的应用程序中的复制/粘贴,我必须使我的所有对象都可序列化,以便能够将它们放入剪贴板并从那里再次获取它们。只要没有必须序列化的List<xy>
个对象,它就可以正常工作。
这是一个对象的第一部分:
[Serializable]
public class Parameter : GObserverSubject, ISerializable, IObserver
{
#region Attributes
private static readonly ILog log = LogManager.GetLogger(typeof(Parameter));
private int priority;
private string name;
private int id;
private string description;
private string comments;
private List<Value> values;
private Container myContainer;
private bool changed;
private int order;
private bool noUpdate;
#endregion
}
我还实现了这两种方法:
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("priority", priority);
info.AddValue("name", name);
info.AddValue("id", id);
info.AddValue("changed", true);
info.AddValue("order", order);
info.AddValue("values", values, values.GetType());
}
protected Parameter(SerializationInfo info, StreamingContext context)
{
priority = info.GetInt32("priority");
name = info.GetString("name");
id = info.GetInt32("id");
values = (List<Value>)info.GetValue("values", values.GetType());
changed = info.GetBoolean("changed");
order = info.GetInt32("order");
}
这是我从TreeView
复制和粘贴内容的方式:
Parameter parameter = ((TreeNodeParameter)this.TestDesignTree.SelectedNode).getParameter();
Clipboard.SetDataObject(parameter);
IDataObject iData = Clipboard.GetDataObject();
Object copiedObject = iData.GetData(DataFormats.Serializable);
log.Info("type of selectednode is: " + this.TestDesignTree.SelectedNode.GetType());
log.Info("type of object in clipboard is: " + copiedObject.GetType());
应用程序在copiedObject.GetType()
与NullReferenceException
崩溃。
我在这里做错了什么?
答案 0 :(得分:0)
似乎唯一的问题是我如何定义对象的类型:
values.GetType()
应该是:
typeof(List<Value>);