从二进制文件中提取对象并放入List

我以前做过这个,但无法弄清楚我是怎么做到的。 我有一个二进制文件,我想存储对象。我已经使用[Serializable]序列化了对象类,并已成功保存到文件中的单个对象。 但是,在尝试读取对象并放入List进行进一步处理时,问题开始出现。

因此,当试图从文件中读取对象时,我有代码:

 List aListOfStuff = new List(); Stream fileStream = File.OpenRead("MyFile.DAT"); BinaryFormatter deserializer = new BinaryFormatter(); aListOfStuff = (List)deserializer.Deserialize(fileStream); fileStream.Close(); 

当我第一次开始测试时,上面的代码没有生成错误,但是当我尝试写入文件时,我会收到一个exception,因为它正被另一个进程使用而无法访问该文件。 在尝试通过注释掉试图检查文件中已存在的内容并且只保存和刷​​新代码处于活动状态的代码的所有部分进行故障排除时,我会在上面的aListofStuff代码行中收到错误,指出“无法将’myStuff’类型'System.Collections.Generic.List'1.对象转换为'System.Collections.Generic.List'1.是的,1是错误而不是拼写错误。这告诉我,我收到’文件仍然打开’消息的原因是因为没有调用.Close()但这仍然无法帮助我解决问题的根源。

所以我假设我只是不知道/记得如何从文件中拉回一个对象列表。 我在网上搜索了如何执行此操作,但无法找到有关特定于对象列表的信息。 文件中单个序列化对象的大量内容,但不超过一个,我发现序列化的那些文章似乎没有扩展。

这是我用来向文件添加对象的代码:

 myStuff newThing = new myStuff(string1, string2, string3); Stream fileStream = File.Open("MyFile.Dat", FileMode.Append); BinaryFormatter serializer = new BinaryFormatter(); serializer.Serialize(fileStream, newThing); fileStream.Close(); 

“无法将’myStuff’类型的对象强制转换为’System.Collections.Generic.List’1’。

这意味着您序列化为File one myStuff对象,而不是对象列表。 检查一下。 你还提供Cna序列化代码?

UPDATE2:

要序列化:

 var list = new List(); var objectOne = new myStuff(string1, string2, string3); // more object here list.Add(objectOne); // list.Add other objects there using(Stream fileStream = File.Open("MyFile.Dat", FileMode.Create)) { BinaryFormatter serializer = new BinaryFormatter(); serializer.Serialize(fileStream, list); } 

要反序列化:

 List list; using(Stream fileStream = File.OpenRead("MyFile.DAT")) { BinaryFormatter deserializer = new BinaryFormatter(); list = (myStuffList)deserializer.Deserialize(fileStream); }