2015-06-02 33 views
4

我是C#的新手,我試圖將一些信息寫入文件。我運行正常,當我在同一個cs文件Car類節目,但是當我刪除這個類到項目中的另一個cs文件,我得到的使用C#序列化異常使用C#

運行時錯誤「SerializationException了未處理:ObjectManager發現無效數量的修正,這通常表明Formatter中存在問題「。

下面是包含Car類的代碼。當我將該類移動到它自己的Car.cs文件時,錯誤開始引發。

namespace ConsoleApplication2 
{ 
    class Program 
    { 

    [Serializable()] 
    public class Car 
    { 
     public string Make { get; set; } 
     public string Model { get; set; } 
     public int Year { get; set; } 

     public Car(string make, string model, int year) 
     { 
      Make = make; 
      Model = model; 
      Year = year; 
     } 
    } 
    /// <summary> 
    /// Deserializes list of cars and returns the list to user 
    /// </summary> 
    /// <returns>Returns deserialized car list</returns> 
    public List<Car> ReadList() 
    { 
     //create local list to hold data 
     List<Car> carList = new List<Car>(); 

     try 
     { 
      using (Stream stream = File.Open("data.bin", FileMode.Open)) 
      { 
       BinaryFormatter bin = new BinaryFormatter(); 

       //point carList to deserialized stream 
       carList = (List<Car>)bin.Deserialize(stream); 

      } 
     } 
     catch (IOException) 
     { 
     } 

     return carList; 
    } 
+0

看看以下內容:https://social.msdn.microsoft.com/Forums/en-US/b310c71a-2479-4a93-888a-29294cecbe09/changing-a-namespace-causes-errors-when- using-binaryformatterdeserialize-to-reload-object-data?forum = csharplanguage –

+0

以下是類似的:http://programmingandwhatnot.blogspot.com/2010/09/binaryformatter-invalid-number-of.html –

回答

2

當首次創建data.bin時,類類型與數據一起存儲。如果您更改類的名稱空間,則格式化程序無法找到存儲的類。

+0

有趣的是,我刪除了數據.bin並重新執行該程序,並完美運行,感謝您的幫助 – Connor