C# 将对象列表保存到磁盘或从磁盘读取对象列表

C# 将对象列表保存到磁盘或从磁盘读取对象列表,c#,C#,我对代码做了一些更改。 保存到磁盘的方法工作正常 public void SaveList() { FileStream stream = new FileStream(@"persons.dat", FileMode.Create); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, myList); stream.Close(); } public void

我对代码做了一些更改。 保存到磁盘的方法工作正常

public void SaveList()
{
   FileStream stream = new FileStream(@"persons.dat", FileMode.Create);
   BinaryFormatter formatter = new BinaryFormatter();
   formatter.Serialize(stream, myList);
   stream.Close();
}

public void ReadList()
{
   FileStream stream = new FileStream(@"persons.dat", FileMode.Open);
   BinaryFormatter formatter = new BinaryFormatter();
   List<Person> myList = formatter.Deserialize(stream) as List<Person>;
}
public void存储列表()
{
FileStream stream=新的FileStream(@“persons.dat”,FileMode.Create);
BinaryFormatter formatter=新的BinaryFormatter();
序列化(流,myList);
stream.Close();
}
公共无效读取列表()
{
FileStream stream=新的FileStream(@“persons.dat”,FileMode.Open);
BinaryFormatter formatter=新的BinaryFormatter();
List myList=格式化程序。反序列化(流)为列表;
}
我可以看到persons.dat文件正在创建中,对象的状态正在保存到该文件中。 但问题在于当你尝试阅读时。重新运行程序并调用ReadList()方法时,不会显示任何错误。然后我调用一个方法来显示列表中存储的对象的详细信息,但是列表是空的

public void ReadList()
public void ReadList()
{
    FileStream stream = new FileStream(@"persons.dat", FileMode.Open);
    BinaryFormatter formatter = new BinaryFormatter();
    myList = (List<Person>)formatter.Deserialize(stream);
    // Here I was creating a new list.. List<Person> myList = (List<Person>)formatter.Deserialize(stream);
    stream.Close();
}
{ FileStream stream=新的FileStream(@“persons.dat”,FileMode.Open); BinaryFormatter formatter=新的BinaryFormatter(); myList=(列表)格式化程序。反序列化(流); //在这里,我创建了一个新的列表。列表myList=(列表)格式化程序。反序列化(流); stream.Close(); }
用上述方法解决了这一问题。
这个问题是我将对象添加到一个新列表中,而不是我在类中创建的列表。

您确定ReadList()中没有引发异常吗?现在,您的代码只是忽略异常。删除try catch block以获取异常或修改catch block。如果您的
Person
类自上次存储以来发生了更改,则您可能无法从以前存储的类中正确获取该类,并且
bf.Deserialize()
将引发异常。在这种情况下,您的
try
块会捕获异常。当前帖子已被编辑以说明代码中的一些更改。但是问题仍然存在。