遇到这样的问题。有一个班级User。它有一个方法SaveUser只将 1 条记录写入文件。有一种方法LoadUsers可以返回写入文件的所有用户的列表。错误发生在注释行中。它不能将 User 转换为 User[]。如何在不重写方法的情况下解决这个问题SaveUser?
class User
{
private string name;
private string password;
private string key;
private static string fileName = @"Data\users.dat";
public void SaveUser()
{
BinaryFormatter formatter = new BinaryFormatter();
// получаем поток, куда будем записывать сериализованный объект
using (FileStream fs = new FileStream(fileName, FileMode.Append))
{
formatter.Serialize(fs, this);
}
}
public static List<User> LoadUsers()
{
List<User> listUser = new List<User>();
BinaryFormatter formatter = new BinaryFormatter();
//десериализация из файла people.dat
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
if (fs == null)
return listUser;
else
{
User[] deserilizeUsers = (User[])formatter.Deserialize(fs);// ошибка, нельзя преобразовать User в User[]
foreach (User user in deserilizeUsers)
{
listUser.Add(user);
}
}
}
return listUser;
}
}
正如评论中已经提到的,您需要在循环中一次反序列化记录。或多或少是这样的:
当然,你需要添加异常处理。