2010-10-11 162 views
14

我们正在寻找使用谷歌的协议缓冲区来处理C++应用程序和c#应用程序之间通过网络的序列化。谷歌的协议缓冲区在c#

我的问题是,我发现了几个不同的c#的版本。这两个看起来不错,但是,没有人知道什么是不同的(如果有的话)两个

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

第一个是由[Marc Gravell](http://stackoverflow.com/users/23354/marc-gravell)(在这里排名第二)和第二个是由[Jon Skeet]写的( http://stackoverflow.com/users/22656/jon-skeet)(在这里声望排名第一)。尽管我从来没有使用过这两种方法,但我敢打赌,你们不可能出错。 – 2010-10-11 16:38:00

+2

鉴于Jon Skeet实际上是为Google工作的,我会先尝试他的版本。 – Gabe 2010-10-11 16:52:07

+3

但哪个更好?只有一种方法可以找出......战斗! (如果你知道Harry Hill是谁,这可能是有道理的 - 否则它可能听起来异常激进......) – 2010-10-11 18:28:59

回答

13

当然之间; dotnet-protobufs是java版本的一个端口,因此与核心谷歌实现共享一个非常相似的API和方法;代码宝石,不变性等

Protobuf-net是字节兼容的,但是是一个完整的从零开始的重新实现,遵循标准的.NET成语 - 所以XmlSerializer的用户很熟悉等。它也可以针对mutable对象(和不可改变根据设定,并在V2结构),并具有WCF,远程可选钩等

两者都可以从.proto工作(可以说是DOTNET-protobufs在这方面比protobuf- 更好净);但protobuf网可以与现有的.net poco/DTO等工作,没有.proto或任何codegen。

此外,protobuf-net提供诸如继承支持之类的东西,但您可能不会选择在您的场景中使用它,因为它无法轻松映射到.proto定义。