我正在寻找关于 .net 应用程序中序列化的建议。该应用程序是桌面/厚客户端应用程序,序列化表示持久化的文档格式。对序列化程序的要求是
- 必须允许序列化字段,而不仅仅是公共属性。
- 不得要求无参数构造函数。
- 必须处理一般对象图,即不仅有 DAG,还有共享/双向引用。
- 必须使用框架类(例如序列化字典)。
目前我们使用 BinaryFormatter 可以很好地处理上述所有问题,但是大小/性能和版本容差是一个问题。我们使用 [OnDeserialized/ing] 属性来提供兼容性,但它不允许在没有复杂使用代理等的情况下进行大型重构(例如命名空间更改)。
一个理想的解决方案是替代 BinaryFormatter,它可以与我们现有的 [NonSerialized] 注释等一起使用,但性能更好,并且生成的格式更小且更易于维护。
我已经查看了不同的 protobuf 实现,尽管这些天似乎可以序列化一般对象图/枚举/结构,但序列化具有许多框架集合类型等的复杂图似乎并不容易。此外,即使我们可以让它与字段而不是属性一起工作,我理解这仍然意味着必须向所有类添加无参数构造函数和 protobuf 注释(域大约有 1000 个类)。
所以问题:
- 是否有任何“替代”二进制格式化程序,提供有据可查的格式,性能更好?
- 协议缓冲区是否适合持久化包括框架类型在内的大型通用对象图?