在.NET中几乎没有实现Google的想法. (即protobuf-csharp-port或protosharp),但最有趣的是protobuf-net.
Protobuf-net是更好的,因为它的架构适合.NET世界,并有几个加载项(不总是与原始protobuf兼容,但非常有用).
其中一个加载项是打开引用跟踪(AsReference选项)的可能性,它允许即使使用循环来序列化复杂图形.
不必要的Protobuf-net v2是测试版,而AsReference选项不适用于现实世界的场景. (没有这个选项,一切都很好,但是没有参考文献Tracikng protobuf-net不能够序列化图形,并不是更有吸引力的serializer).
它仍然有一些错误:
> Issue 196
> Issue 213
> Issue 232
> Issue 242
> SO 6294295
> SO 7219959
所以,我不能使用这个伟大的工具,我正在寻找替代串行器,其中:
>至少一样快,产量小到protobuf
>易于采用目前的项目,如protobuf-net
>允许将数据类型DataContractSerializer序列化,将PreserveObjectReferences设置为true
>不仅对于简单的对象,而且对于复杂的现实世界场景是稳定的
即使复杂的场景也可以很容易地采用,我们尽量使它变得容易使用.
输出尺寸相当小.当然,这取决于你的对象树,但它可以与protobuf-net相媲美.像protobuf一样,它使用Varint和ZigZag编码.
当然,移民解决了你提到的问题 – 它保留对象的整个图形,处理继承,复杂的集合,版本容限(直到某一点)等等.
在速度方面,我们试图与protobuf-net进行比较.它支持使用动态生成的方法的de / serialization,这比基于经典反射的解决方案要快得多.
我已经链接到的站点上提供了简单的使用场景,但简单的对象克隆是直观的.
var myComplexObject = new MyComplexType(complexParameters); var myObjectCopy = serializer.DeepClone(myComplexObject);
写入流是一样简单.
当然,对于非常复杂的类型,有一些类装饰器(属性,钩子)使事情更加智能化;-)