一个类/对象必须改变多少才能使二进制反序列化失败

Ben*_*Ben 7 .net c# binary-serialization binary-deserialization

我们有一个解决方案,我们将一个相当大/复杂的 C# 对象作为二进制数据存储在我们的数据库中。我担心的是,当对这个类进行更改时,我们冒着保存到数据库的数据在代码更改后反序列化失败的风险。

这是我们用来序列化对象的代码:

    public static byte[] SerializeObject(object toBeSerialized)
    {
        var stream = new MemoryStream();
        var serializer = new BinaryFormatter();
        serializer.Serialize(stream, toBeSerialized);
        stream.Position = 0;
        return stream.ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

这是我们的反序列化方法:

    public static T DeserializeObject<T>(byte[] toBeDeserialized)
    {
        using (var input = new MemoryStream(toBeDeserialized))
        {
            var formatter = new BinaryFormatter();
            input.Seek(0, SeekOrigin.Begin);
            return (T) formatter.Deserialize(input);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,为了使旧对象的反序列化失败,必须改变什么/必须改变多少?

Ars*_*yan 6

总是让系列化版本公差,在文章中,你可以找到一些建议怎么办呢

你也可以找到一些情况,在下面破坏序列化/反序列化

  • 删除序列化字段时

  • 当您将 NonSerializedAttribute 属性应用于字段时,如果该属性未应用于先前版本中的字段。

  • 当您更改序列化字段的名称或类型时。

  • 添加新的序列化字段时,没有 OptionalFieldAttribute 属性。

  • 从字段(在以前的版本中不可序列化)中删除 NonSerializedAttribute 属性时,没有 OptionalFieldAttribute 属性。