我有一个简单的课程
[Serializable]
public class MyClass: ISerializable
{
public string var1;
public MyClass()
{
}
public MyClass(SerializationInfo info, StreamingContext context)
{
var1= info.GetString("var1");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("var1", var1);
}
}
我用
序列化了using(FileStream file = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Read))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(file, myClassInstance);
}
比我决定添加一个新字段
[Serializable]
public class MyClass: ISerializable
{
public string var1;
[OptionalField]
public string var2;
public MyClass()
{
}
public MyClass(SerializationInfo info, StreamingContext context)
{
var1= info.GetString("var1");
var2= info.GetString("var2");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("var1", var1);
info.AddValue("var2", var2);
}
}
但是我有序列化异常,因为流中不存在var2
字段。 OptionalFieldAttribute
是不应该特别针对那种情况制作的?我有switch/case
的解决方法,但我不明白为什么这不起作用?
[编辑]
这个错误是因为我在Matlab中使用了这个dll并且所有程序集都没有正确加载!但是,正如dbc
所提到的,在实现ISerializable接口时不会考虑该属性。