.NET协议缓冲区库的差异

7

目前,.NET有两个proto buf库:

http://code.google.com/p/protobuf-csharp-port/ 由Jon Skeet拥有 http://code.google.com/p/protobuf-net/ 由Marc Gravell拥有

这两者之间有什么区别?它们是否编码为与Google规范相同的规范?是否存在任何差异?

我之所以问是因为我们当前在Java和潜在的C++库之间使用proto buf互操作,并希望确保我们避免任何问题或边缘情况。

1个回答

11

Jon的版本在很大程度上是Java版本的移植,因此具有非常相似的API和设计方法。据我所知,它完全是基于协议文件(contract-first),也就是.proto文件。

我的版本更多地从.NET角度来看待它,关注.NET序列化器中的共同点 - 可变对象、对现有类型的改造、代码优先(虽然如果您想要的话,它仍然可以从.proto文件生成代码)。它甚至可以从XmlSerializerDataContractSerializer使用的属性推断数据,与现有代码并行工作,并且可以插入远程调用(ISerializable)和WCF(attributes或configuration)。因此,它深深扎根于.NET生态系统。我还包括了继承支持(因为这在其他.NET序列化器中非常常见),但是这有些难以将其映射到其他平台,因为它在.proto文件中没有直接的表示形式。

二进制数据应该是相同的;那在很大程度上是这种格式的目的; p它主要取决于哪个API可能更适合你的需求。

对于你的需求,需要在同一系统中与C++和Java代码并行工作,并使用现有的.proto定义,我建议选择Jon的版本可能是最合适的选项。

但是,如果您仅使用.NET或者在.NET中与外部代码进行交互(即只需要担心自己的代码,不关心"另一边"使用的语言),那么我认为protobuf-net可能是消费数据的一种相当轻松的方式;特别是如果你有一个现有的系统,现在你发现你想要序列化它(或者:序列化得更快/更小)。


1
谢谢Marc。我们从第一天开始就使用了你的版本,但是随着更多的团队开始使用这些库,我们需要一些澄清。 - Ray Booysen
@Ray 那就继续使用它并享受吧 ;p - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接