反序列化类时不考虑OptionalField

时间:2015-10-13 20:12:36

标签: c# serialization attributes binaryformatter

我有一个简单的课程

[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接口时不会考虑该属性。

0 个答案:

没有答案