如何支持对象序列化和反序列化以使用 .net 更改 class 结构?
How to support object Serialization and Deserialization for changing class structure with .net?
我有一个可以随时间变化的实体 class。截至目前,我通过二进制序列化来序列化此 class 的一个对象。但是,如果我向 class 添加一个新的 属性,我将无法反序列化之前序列化的流。我试过是否可以将 BSON
与 json.net
一起使用。
我需要处理这些事情:
- 序列化数据的内存占用应该很低
- 序列化和反序列化应该很快
- 需要为使用旧实体 class 结构序列化的数据提供向后兼容性
我考虑的一种方法是在序列化之前将对象转换为 IDictionary
,这样我就可以将默认值设置为反序列化时不匹配的属性。虽然这很有效,但它涉及将对象转换为 IDictionary
.
的额外步骤
有人遇到过这种情况吗?你使用什么方法?
实际上二进制序列化非常灵活。当然,您可以只将 [Serializable]
属性添加到 class 而忽略细节,但您也可以通过实现 ISerializable interface/by adding methods/attributes which corresponds to the certain steps of serialization/deserialization lifecycle. Considering your question about structure changes, please take a look on the following article.
来完全控制序列化
我有一个可以随时间变化的实体 class。截至目前,我通过二进制序列化来序列化此 class 的一个对象。但是,如果我向 class 添加一个新的 属性,我将无法反序列化之前序列化的流。我试过是否可以将 BSON
与 json.net
一起使用。
我需要处理这些事情:
- 序列化数据的内存占用应该很低
- 序列化和反序列化应该很快
- 需要为使用旧实体 class 结构序列化的数据提供向后兼容性
我考虑的一种方法是在序列化之前将对象转换为 IDictionary
,这样我就可以将默认值设置为反序列化时不匹配的属性。虽然这很有效,但它涉及将对象转换为 IDictionary
.
有人遇到过这种情况吗?你使用什么方法?
实际上二进制序列化非常灵活。当然,您可以只将 [Serializable]
属性添加到 class 而忽略细节,但您也可以通过实现 ISerializable interface/by adding methods/attributes which corresponds to the certain steps of serialization/deserialization lifecycle. Considering your question about structure changes, please take a look on the following article.