使用C#进行序列化异常

时间:2015-06-02 22:55:34

标签: c# serialization deserialization

我是C#的新手,我正在尝试将一些信息写入文件。当我将Car类放在同一个.cs文件中时,我让程序正常运行,但是当我将这个类移到项目中的另一个.cs文件中时,我得到运行时错误

  

“未处理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;
     }

2 个答案:

答案 0 :(得分:3)

首次创建data.bin时,类类型与数据一起存储。如果更改了类的命名空间,则格式化程序无法找到存储的类。

答案 1 :(得分:0)

如果您使用Asp.Net遇到此问题,则需要清除浏览器缓存和cookie,因为使用干净bin文件夹的解决方案不起作用(重新启动iis也不起作用)