2013-10-20 128 views
-1

我对我的代码做了一些更改。 保存到磁盘的方法工作正常。保存/读取磁盘对象列表

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>; 
} 

我可以看到正在创建persons.dat文件,并且该对象的状态正被保存到文件中。 但尝试阅读时,问题在于。当重新运行该程序并调用ReadList()方法时,不会显示错误。然后我调用一个方法来展示存储在列表中的对象的细节,但列表是空的!

+2

你确定ReadList()中没有抛出异常吗?现在,你的代码只是忽略异常。 – elgonzo

+0

删除try catch块以获取异常或修改catch块。 – User1551892

+0

如果您的'Person'类自上次存储之后发生了更改,那么您可能无法从之前存储的类中获取它,而'bf.Deserialize()'将引发异常。在这种情况下,你的异常被你的'try'块捕获。 – MahanGM

回答

0
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(); 
} 

问题已经用上面的方法解决了。 这个问题是我将对象添加到新列表中,而不是我在该类中创建的列表。