我有一个自定义集合,它为"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所建议的那样——进入另一个类。