我正在使用二進制格式化程序來保存/加載文件中的數據。我有一個圖書館系統,有兩個具體類 - Users
和Items
- 和一個abstract
類 - 圖書館。我也在使用兩個列表:反序列化 - 從文件加載數據
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...");
儲蓄似乎很好地工作。然而,加載不是。我收到此錯誤消息:
其他信息:無法轉換'System.Collections.Generic.List
1[LibrarySystem.User]' to type 'System.Collections.Generic.List
1 [LibrarySystem.Item]'類型的對象。
謝謝!
該代碼現在工作沒有任何錯誤。但是,加載時,保存後實際上從文件加載的nothings! –
這很奇怪,因爲我用簡單的例子和集合檢查了這個代碼(我用1和2個元素進行了檢查)實際上是反序列化的。 –
您可以在調用Serialize方法後檢查存在的文件,並檢查文件內容(如果文件不爲空/ 0bytes,那就足夠了)。然後,您可以逐行調試代碼,以確保您的文件可以在Deserialize方法中訪問。 另外,如果您要從'Library.myUsers'保存數據,您可能想要將其加載到相同的變量?然後,使用'Library.myUsers =(列表)庫。反序列化(pathUser);' –