【问题标题】:How to support object Serialization and Deserialization for changing class structure with .net?如何支持对象序列化和反序列化以使用 .net 更改类结构?
【发布时间】:2015-05-29 16:09:30
【问题描述】:

我有一个可以随时间变化的实体类。截至目前,我用二进制序列化来序列化这个类的一个对象。但是如果我在类中添加一个新属性,我就无法反序列化之前序列化的流。我试过是否可以将BSONjson.net 一起使用。

我需要处理这些事情:

  • 序列化数据的内存占用应该很低
  • 序列化和反序列化应该很快
  • 需要为使用旧实体类结构序列化的数据提供向后兼容性

我考虑的一种方法是在序列化之前将对象转换为IDictionary,以便我可以将默认值设置为反序列化时不匹配的属性。虽然这很有效,但它涉及将对象转换为 IDictionary 的额外步骤。

有人遇到过这种情况吗?您使用的方法是什么?

【问题讨论】:

  • 你看过Version Tolerant Serialization:msdn.microsoft.com/en-us/library/ms229752%28v=vs.110%29.aspx
  • 带有类型提示的基于文本的 json 可以解决向后兼容性问题,但可能无法满足您的内存和性能需求。
  • @MikeParkhill,这正是我要找的……!
  • @yoyo 基于 json 的方法对我来说效果不佳,因为数据量很大
  • 很公平,我只是想提一下。如果其他人来这里寻找有关向后兼容序列化的信息,也许它会对他们有所帮助。

标签: c# serialization


【解决方案1】:

实际上二进制序列化是非常灵活的。当然,你可以在类中添加[Serializable]属性而忽略细节,但你也可以通过实现ISerializable接口/通过添加对应于序列化某些步骤的方法/属性来完全控制序列化/反序列化生命周期。考虑到您关于结构更改的问题,请查看following article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多