序列化对象列表失败,出现NullReferenceException

时间:2014-04-24 07:44:16

标签: c# list serialization clipboard

为了支持我的应用程序中的复制/粘贴,我必须使我的所有对象都可序列化,以便能够将它们放入剪贴板并从那里再次获取它们。只要没有必须序列化的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崩溃。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

似乎唯一的问题是我如何定义对象的类型:

values.GetType()

应该是:

typeof(List<Value>);