gpt4 book ai didi

c# - 为了使二进制反序列化失败,类/对象必须更改多少

转载 作者:太空狗 更新时间:2023-10-30 00:51:02 25 4
gpt4 key购买 nike

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

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

最佳答案

始终使序列化版本容忍,在this这篇文章你可以找到一些建议如何去做

您还可以在下面找到一些破坏序列化/反序列化的情况

  • 当您删除序列化字段时

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

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

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

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

关于c# - 为了使二进制反序列化失败,类/对象必须更改多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com