如何使用二进制反序列化从文件文本文件反序列化

本文关键字:文件 反序列化 文本 何使用 二进制 | 更新日期: 2023-09-27 18:02:04

public static List<Restaurant> LoadRestaurantList() 
{
    FileStream fs = new FileStream("Restaurant.txt", FileMode.OpenOrCreate); 
    BinaryFormatter bf = new BinaryFormatter(); 
    List<Restaurant> rest =(List<Restaurant>)bf.Deserialize(fs); 
    fs.Close(); 
    return rest; 
}

我有序列化的通用列表,我有,到"餐厅。txt"文件。

现在我想反序列化相同并将其返回到泛型列表,我已经尝试过了但是它不工作,它给出错误"Invalid Cast Expression"。

序列化代码:

public static void SaveRestaurantList(List<Restaurant> restaurantList) 
{ 
   FileStream fs = new FileStream("Restaurant.txt", FileMode.Create, FileAccess.Write);
   BinaryFormatter bf = new BinaryFormatter(); 
   for (int i = 0; i < restaurantList.Count; i++) 
   {  
        Restaurant r = new Restaurant(); 
        r = (Restaurant)restaurantList[i]; 
        bf.Serialize(fs, r); 
        fs.Flush(); 
   } 
   fs.Close(); 
}

有谁能帮忙解决这个问题吗

如何使用二进制反序列化从文件文本文件反序列化

序列化和反序列化互为对立面。这意味着在序列化期间使用的类型在反序列化期间需要相同。

在您的代码中,情况并非如此。序列化Restaurant类型,但反序列化时期望的是List。

按如下方式调整序列化代码:

public static void SaveRestaurantList(List<Restaurant> restaurantList) 
{ 
   using(FileStream fs = new FileStream("Restaurant.txt", FileMode.Create, FileAccess.Write))
   {
       BinaryFormatter bf = new BinaryFormatter(); 
       bf.Serialize(fs, restaurantList); 
   }
}