【问题标题】:Google's Protocol Buffers in c#C# 中的 Google 协议缓冲区
【发布时间】:2011-04-23 21:58:42
【问题描述】:

我们正在考虑使用 Google 的协议缓冲区通过网络处理 c++ 应用程序和 c# 应用程序之间的序列化。

我的问题是,我为 c# 找到了几个不同的版本。两者看起来都不错,但是,有人知道两者之间有什么不同(如果有的话)

  1. protobuf-net
  2. jskeet / dotnet-protobufs

【问题讨论】:

  • 第一个是Marc Gravell写的(这里声望排名第二),第二个是Jon Skeet写的(这里声望排名第一)。尽管我从未使用过其中任何一个,但我敢打赌,无论哪种方式,您都不会出错。
  • 鉴于 Jon Skeet 实际上为 Google 工作,我会先尝试他的版本。
  • 但是哪个更好?只有一种方法可以找出答案……战斗! (如果你知道 Harry Hill 是谁,这可能是有道理的 - 否则听起来可能异常激进......)

标签: c# c++ serialization protocol-buffers


【解决方案1】:

当然; dotnet-protobufs 是 java 版本的移植,因此与核心 google 实现共享非常相似的 API 和方法;代码宝石、不变性等。

Protobuf-net 是字节兼容的,但它是一个完整的从头开始的重新实现,遵循标准的 .NET 习惯用法 - 所以 XmlSerializer 等的用户熟悉它。它也适用于可变对象(并且根据设置不可变,和 v2 中的结构),并具有用于 WCF、远程处理等的可选钩子。

两者都可以在 .proto 上工作(可以说 dotnet-protobufs 在这方面比 protobuf-net 更好);但是 protobuf-net 可以在没有 .proto 或任何 codegen 的情况下针对现有的 .net poco/DTO 等工作。

此外,protobuf-net 还提供继承支持等功能,但您可能不会选择在您的场景中使用它,因为它不能轻松映射到 .proto 定义。

【讨论】: