我在我的类上实现了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
)变量已经被序列化了。那我怎么能避免这种行为呢?因为我确信稍后我会在我的班级中添加更多需要序列化的成员。
答案 0 :(得分:0)
那是因为构造函数被调用反序列化,而信息已经包含成员foo。
在该构造函数中,您应该从info中读取您的字段值。 ISerializable还有另一个用于序列化的方法(GetObjectData),你应该将你的字段添加到该方法体内的信息中,而不是在构造函数中。