自定义集合类中的反序列化



我有一个自定义集合,它为"ArrayList"类添加了功能。

这是课堂上的一些代码:

    [Serializable]
    class Coll : ArrayList
    {
       public void Save(string path)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream fsOut = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
                formatter.Serialize(fsOut, this);
                fsOut.Dispose();
            }
    }

我现在正在尝试反序列化一个文件,并用该文件的内容填充集合。基本上与我的Save(string path)方法相反。

这就是我目前所掌握的:

public void Read(string path)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream fsIn = new FileStream(path, FileMode.Open, FileAccess.Read);
                formatter.Deserialize(fsIn);
                fsIn.Dispose();
            }

我应该如何使用已反序列化的内容填充集合?

BinaryFormatter不支持将串行化为现有对象。您可以将其反序列化为新的列表,只需将其设为static方法并返回值即可。

其他想法:

  • 除非你在.net 1.1中,否则不要使用ArrayList:最好使用List<T>
  • 无需进行子类化;一个扩展方法就足够了
  • 我不推荐使用BinaryFormatter。。。或者其他什么

方法BinaryFormatter.Deserialize()创建一个新对象,用流中的数据初始化并返回。因此,您应该使用返回值并将其用作新的ArrayList对象。因此,Read方法进入一个静态方法,或者——正如digingforfire所建议的那样——进入另一个类。

相关内容

  • 没有找到相关文章

最新更新