2

我有以下问题:

我的对象被序列化如下:

MemoryStream memorystream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, _policy);
CaptureData = Convert.ToBase64String(memorystream.ToArray());

然后保存到我的数据库中,并根据需要对数据库中保存的数据进行反序列化。

我现在的问题是我无法更改此对象、添加属性等,因为这会破坏反序列化。

关于如何在不破坏先前对象的序列化的情况下添加属性的任何建议?

4

3 回答 3

1

You can use [OptionalField] and similar to take advantage of the version tolerant serialisation built into .Net.

于 2012-12-06T10:34:21.983 回答
1

我认为不可能使用这个序列化程序。

如果可能,请使用另一个处理向后兼容性的序列化程序,例如协议缓冲区

于 2012-12-06T10:32:06.053 回答
0

您需要从内置的序列化转移,因为正如您所见,它是刚性的且不可扩展。选择任何其他可让您保持类型的可扩展性和系统灵活性的序列化技术。

  • 自定义二进制序列化
  • xml序列化
  • json序列化
  • 使用 protobuf 进行二进制序列化(只是示例......)

这一切,如果你做到的话。如果没有,对于一些架构(历史)限制,可以做一些类似于哈姆雷特评论中建议的事情。但这对我来说听起来像是一个粗略的解决方案。

于 2012-12-06T10:31:38.160 回答