SerializationException:值已经序列化

时间:2015-11-17 21:48:10

标签: c# serialization exception-handling

我在我的类上实现了ISerializable接口,所以我按如下方式序列化我的数据:

[Serializable]
public class MyClass: ISerializable
{
   public MyClass() {//default constructor}
   public int foo = 5;
   public GetObjectData(SerializationInfo info, StreamingContext context)
   {
        info.AddValue("foo",foo,typeof(int));
   }
}

这会编译whitout错误。但后来我决定要将float成员添加到MyClass类,所以现在我对MyClass的定义是:

[Serializable]
public class MyClass: ISerializable
{
   public MyClass() {//default constructor}
   public int foo = 5;
   public float ffoo = 3.14;   //the added member
   public GetObjectData(SerializationInfo info, StreamingContext context)
   {
        info.AddValue("foo",foo,typeof(int)); 
        info.AddValue("ffoo",ffoo,typeof(float));
   }
}

但是现在抛出了SerializationException,说价值(foo)变量已经被序列化了。那我怎么能避免这种行为呢?因为我确信稍后我会在我的班级中添加更多需要序列化的成员。

1 个答案:

答案 0 :(得分:0)

那是因为构造函数被调用反序列化,而信息已经包含成员foo。

在该构造函数中,您应该从info中读取您的字段值。 ISerializable还有另一个用于序列化的方法(GetObjectData),你应该将你的字段添加到该方法体内的信息中,而不是在构造函数中。