一个类/对象必须更改多少,以使二进制序列化失败



我们有一个解决方案,其中我们将数据库中的相当大/复杂的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();
    }

这是我们的挑选方法:

    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);
        }
    }

我的问题是,必须更改/必须更改多少才能使旧对象失败?

始终使序列化版本公差,在本文中,您可以找到一些建议如何做

您还可以找到一些情况,这些情况破坏了序列化/避难所

  • 删除序列化字段

  • 如果未将属性应用于上一个版本中的字段,则将非序列化attribute属性应用于字段。

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

  • 添加新的序列化字段时,无需可选的fieldattribute属性。

  • 从一个字段中删除非序列化的attribute属性(在先前版本中不可序列化),而没有可选的fieldatattribute属性。

班级数据结构(属性和字段)的任何更改将在试图进行数据序列化时引起您的问题。

我确定更改方法的定义不会引起您没有问题,并且添加或删除方法同样可以。

编辑:我已经对我开发的类似系统进行了一些测试,我发现您可以添加新的属性和字段,并且仍然可以使旧对象进行估算。在我看来,您唯一遇到的问题是删除,重命名或更改现有字段和属性的类型。

相关问题

最新更新