And*_*ren 6 .net c# serialization protocol-buffers binaryformatter
我正在寻找有关.net应用程序序列化的建议.该应用程序是桌面/胖客户端应用程序,序列化表示持久文档格式.序列化器的要求是
目前我们使用BinaryFormatter来处理上述所有问题,但是尺寸/性能和版本容差是个问题.我们使用[OnDeserialized/ing]属性来提供兼容性,但它不允许大型重构(比如命名空间更改)而不需要复杂使用代理等等.
理想的解决方案是直接替换BinaryFormatter,它可以与我们现有的[NonSerialized]注释等一起使用,但性能更好,并且生成的格式更小,更易于维护.
我已经查看了不同的protobuf实现,尽管现在似乎可以序列化一般对象图/枚举/结构,但是使用大量框架集类型等序列化复杂图形似乎并不容易.而且,即使我们可以使用字段而不是属性我理解它仍然意味着必须向所有类添加无参数构造函数和protobuf注释(域约为1000个类).
所以问题:
协议缓冲区作为一种格式没有对象图的官方支持,但protobuf-net 确实提供了这一点,并满足您的其他要求.依次取点:
当然; protobuf-net可以为公共和非公共领域做到这一点; 在运行时或通过属性告诉它有关字段的信息
这在"v2"中可用 - 再次,您可以告诉它在运行时或通过属性(SkipConstructor=true在合同上)跳过构造函数
当然; AsReference=true在会员上标记
标准列表和词典工作正常; 但是,我有一个优秀的变更请求,支持AsReference 内部字典.意思是,目前Dictionary<string, Foo>不会运行图形代码,但如果它导致你的重大痛苦,我可能会找一些时间看看这个Foo
完全支持序列化回调
命名空间等对protobuf-net一点都不感兴趣(除非你使用的是DynamicType选项)
不必要; 如果您可以保证不会更改字段名称,可以要求它在内部推断字段编号 - 最终在"v2"中可以在运行时指定所有内容,因此您通常可以编写一个运行于的小配置循环app-startup并使用反射来配置系统.然后,你不需要改变现有的代码在所有.
| 归档时间: |
|
| 查看次数: |
1666 次 |
| 最近记录: |