Я использую Binary Formatter для сохранения/загрузки данных из файла. У меня есть библиотечная система с двумя конкретными классами - Users
и Items
- и класс abstract
- Библиотека. Я также использую два списка:Deserialize - Загрузка данных из файла
List<Item> items = new List<Item>();
List<User> users = new List<User>();
public static void Serialize(object value, string path)
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream fStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
formatter.Serialize(fStream, value);
}
}
public static object Deserialize(string path)
{
if (!System.IO.File.Exists(path)) { throw new NotImplementedException(); }
BinaryFormatter formatter = new BinaryFormatter();
using (Stream fStream = File.OpenRead(path))
{
return formatter.Deserialize(fStream);
}
}
}
Выше представлены два метода, которые я использую для сохранения и загрузки.
Чтобы вызвать их из файла программы, я использую этот код для сохранения:
string pathItem1 = @"itemList";
string pathUser1 = @"userList";
Library.Serialize(Library.myItems, pathItem1);
Library.Serialize(Library.myUsers, pathUser1);
Console.WriteLine("Serializing...");
и этот код для загрузки:
string pathItem = @"itemList";
string pathUser = @"userList";
//var deserializedItem
List<Item> items= (List<Item>)Library.Deserialize(pathItem);
//var deserializedUser =
List<User> users = (List<User>)Library.Deserialize(pathUser);
Console.WriteLine("Deserializing...");
Saving, кажется, работает хорошо. Загрузка, однако, нет. Я получаю сообщение об ошибке:
Дополнительная информация: Не удается привести объект типа 'System.Collections.Generic.List
1[LibrarySystem.User]' to type 'System.Collections.Generic.List
1 [LibrarySystem.Item].
Спасибо!
Код теперь без ошибок. Однако при загрузке ничего не загружается из файла после сохранения! –
Странно, потому что я проверил этот код с помощью простого примера и коллекции (я проверил его с 1 и 2 элементами) фактически десериализован. –
Вы можете проверить файл, существующий после вызова метода Serialize, а также проверить содержимое файла (этого достаточно, если файл не пуст/0 байтов). Затем вы можете отлаживать код по строкам, чтобы убедиться, что ваш файл доступен в методе Deserialize. Кроме того, если вы сохраняете данные из 'Library.myUsers', возможно, хотите загрузить их в одну и ту же переменную? Затем используйте библиотеку LibraryMyUsers = (Список).Deserialize (pathUser); ' –