从二进制文件中提取对象并放入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); }