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

本文关键字:出现 NullReferenceException 失败 对象 列表 序列化 | 更新日期: 2023-09-27 17:59:41

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

应用程序在具有NullReferenceExceptioncopiedObject.GetType()处崩溃。

我在这里做错了什么?

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

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

values.GetType()

应该是:

typeof(List<Value>);