Столкнулся с такой проблемой. Есть класс 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;
}
}
Как уже сказано в комментарии, десериализовать записи нужно по одной, в цикле. Примерно, так:
List<User> listUser = new List<User>();
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
while (fs.Position < fs.Length)
{
var user = (User)formatter.Deserialize(fs);
listUser.Add(user);
}
}
return listUser;
Конечно, нужно добавить обработку исключений.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости