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

时间:2014-05-06 15:54:31

标签: c# serialization

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; 
}

我将Serailze的通用列表存入“Restaurant.txt”文件。

现在我想反序列化并将其返回到通用列表中,我已经尝试过了 但它没有工作,它给出错误“无效的演员表达”。

这是序列化代码:

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(); 
}

任何人都可以帮忙解决这个问题。

1 个答案:

答案 0 :(得分:1)

序列化和反序列化是彼此相反的。这意味着序列化期间使用的类型在反序列化期间需要相同。

在您的代码中并非如此。您序列化了餐厅类型,但是当您反序列化时,您需要一个列表。

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

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); 
   }
}