C# 从二进制文件中提取对象并放入列表<;T>;

C# 从二进制文件中提取对象并放入列表<;T>;,c#,serialization,deserialization,C#,Serialization,Deserialization,我以前做过,但不知道我是怎么做的。我有一个二进制文件,我想在其中存储对象。我已经用[Serializable]序列化了对象类,并成功地将各个对象保存到文件中。但是,当尝试读取对象并将其放入列表以进行进一步处理时,就会出现问题 因此,当尝试从文件中读取对象时,我有以下代码: List<myStuff> aListOfStuff = new List<myStuff>(); Stream fileStream = File.OpenRead("MyFile.DAT"); Bi

我以前做过,但不知道我是怎么做的。我有一个二进制文件,我想在其中存储对象。我已经用
[Serializable]
序列化了对象类,并成功地将各个对象保存到文件中。但是,当尝试读取对象并将其放入
列表
以进行进一步处理时,就会出现问题

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

List<myStuff> aListOfStuff = new List<myStuff>();
Stream fileStream = File.OpenRead("MyFile.DAT");
BinaryFormatter deserializer = new BinaryFormatter();
aListOfStuff = (List<myStuff>)deserializer.Deserialize(fileStream);
fileStream.Close();
无法将“myStuff”类型的对象强制转换为“System.Collections.Generic.List”类型1

这意味着您将一个myStuff对象序列化到文件中,而不是一个对象列表。请选中此项。Cna您还提供了序列化代码吗

更新2:

要序列化:

var list = new List<myStuff>();
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<myStuff> list;
using(Stream fileStream = File.OpenRead("MyFile.DAT"))
{
  BinaryFormatter deserializer = new BinaryFormatter();
  list = (myStuffList<myStuff>)deserializer.Deserialize(fileStream);
}
var list=newlist();
var objectOne=new myStuff(string1、string2、string3);
//这里有更多的对象
列表。添加(objectOne);
//列表。在此处添加其他对象
使用(Stream fileStream=File.Open(“MyFile.Dat”,FileMode.Create))
{
BinaryFormatter序列化程序=新的BinaryFormatter();
序列化(文件流,列表);
}
要反序列化:

var list = new List<myStuff>();
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<myStuff> list;
using(Stream fileStream = File.OpenRead("MyFile.DAT"))
{
  BinaryFormatter deserializer = new BinaryFormatter();
  list = (myStuffList<myStuff>)deserializer.Deserialize(fileStream);
}
列表;
使用(Stream fileStream=File.OpenRead(“MyFile.DAT”))
{
BinaryFormatter反序列化程序=新的BinaryFormatter();
list=(myStuffList)反序列化程序;
}

使用Using语句使文件始终关闭,即使出现异常。您以不同的方式序列化了数据,编写了单独的myStuff对象,而不是它们的列表。在我的疑难解答中,我尝试使用Using语句,但它不喜欢我的列表被声明在它之外的事实。尽管如此,是否存在一种在文件中获取一组不同对象并将其添加到列表中的干净方法?或者我应该返回并重新编写代码,以便在文件读/写方面始终使用整个列表而不是单个对象?错误中的“1”表示在案例列表中它是一个具有1个类型参数的泛型类型。我是对的,您正在序列化m仅限yStuff对象。若要反序列化,请使用答案中的代码。如果我错了,请更正我,但您的代码将反序列化单个对象,而不是文件中的所有对象,对吗?我如何访问所有对象?您的代码仅将1个myStuff对象放入文件,这就是问题所在。您可以将其更改为st对象放入文件中,然后您可以从此文件读回列表。我将更新应答我的代码一次只放入一个对象,是的。但是,我当前的代码是通过FileMode.Append执行的,它将对象添加到文件的末尾。我将修改我的代码以仅处理列表,因为似乎正在尝试保存indiv单个对象,然后读出所说的对象并将其添加到列表中只会让事情变得更糟。@Brad,你说得对,如果需要存储列表,请将列表序列化到文件中。