使用 C# 的序列化异常
Serialization exception using C#
我是 C# 的新手,正在尝试将一些信息写入文件。当我在同一个 .cs 文件中有 Car class 时,我正确地得到了程序 运行,但是当我将这个 class 删除到项目中的另一个 .cs 文件中时,我得到了运行时
的错误
"SerializationException was unhandled: The ObjectManager found an invalid number of fixups. This usually indicates a problem in the Formatter".
下面是包含汽车 class 的代码。当我将 class 移动到它自己的 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;
}
首次创建 data.bin 时,class 类型与数据一起存储。如果您更改 class 的命名空间,则格式化程序无法找到存储的 class。
如果您使用 Asp.Net 并遇到该问题,您需要清除浏览器缓存和 cookie,因为清理 bin 文件夹的解决方案不起作用(重新启动 iis 也不起作用)
我是 C# 的新手,正在尝试将一些信息写入文件。当我在同一个 .cs 文件中有 Car class 时,我正确地得到了程序 运行,但是当我将这个 class 删除到项目中的另一个 .cs 文件中时,我得到了运行时
的错误"SerializationException was unhandled: The ObjectManager found an invalid number of fixups. This usually indicates a problem in the Formatter".
下面是包含汽车 class 的代码。当我将 class 移动到它自己的 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;
}
首次创建 data.bin 时,class 类型与数据一起存储。如果您更改 class 的命名空间,则格式化程序无法找到存储的 class。
如果您使用 Asp.Net 并遇到该问题,您需要清除浏览器缓存和 cookie,因为清理 bin 文件夹的解决方案不起作用(重新启动 iis 也不起作用)