我同意乔恩的观点;如果您在多个环境中进行编码,那么他的版本为您提供了与其他“核心”实现类似的 API。protobuf-net 与大多数 .NET 序列化程序的实现方式更加相似,因此对 .NET 开发人员更熟悉(IMO)。正如 Jon 所指出的 - 原始二进制输出应该是相同的,因此您可以在以后需要时使用不同的 API 重新实现。
protobuf-net 的一些要点是特定于此实现的:
- 适用于现有类型(不仅仅是从 .proto 生成的类型)
- 在 WCF 和 memcached 之类的东西下工作
- 可用于实现
ISerializable
现有类型
- 支持继承*和序列化回调方法
- 支持常见的模式,如
ShouldSerialize[name]
- 适用于现有的修饰类型(
XmlType
/XmlElement
或DataContract
/ DataMember
) - 意味着(例如)LINQ-to-SQL 模型开箱即用地序列化(只要在 DBML 中启用序列化)
- 在 v2 中,适用于没有任何属性的 POCO 类型
- 在 v2 中,适用于 .NET 1.1(不确定这是一个巨大的销售功能)和大多数其他框架(包括 monotouch - 耶!)
- 可能(尚未实现)v2 可能支持全图*序列化(不仅仅是树序列化)
(*=这些功能使用 100% 有效的 protobuf 二进制文件,但可能很难从其他语言中使用)