我最近不得不寻找最初由Google开发的Protocol Buffers库的C#移植.猜猜看,我在这里发现了两个知名人士拥有的两个项目:由Jon Skeet编写的protobuf-csharp-port和由Marc Gravell编写的protobuf-net.我的问题很简单:我必须选择哪一个?
我非常喜欢Marc的解决方案,因为在我看来,我更接近C#philisophy(例如,你可以只添加属性到现有类的属性),看起来它可以支持.NET内置类型,如System.Guid.
我相信他们两个都是很棒的项目,但你的意见是什么?
Mar*_*ell 57
我同意Jon的观点; 如果您在多个环境中进行编码,那么他的版本会为您提供与其他"核心"实现类似的API.protobuf-net与大多数.NET序列化程序的实现方式更相似,因此对.NET开发人员更为熟悉(IMO).正如Jon所说 - 原始二进制输出应该是相同的,因此如果您以后需要,可以使用不同的API重新实现.
有些点是针对此实现特定的 protobuf-net :
ISerializable现有类型ShouldSerialize[name]XmlType/ XmlElement或DataContract/ DataMember) - 意味着(例如)LINQ-to-SQL模型开箱即用(只要在DBML中启用了序列化)(*=这些功能使用100%有效的protobuf二进制文件,但可能很难从其他语言中使用)
Jon*_*eet 40
您是否也在项目中使用其他语言?如果是这样,我的C#端口将允许您在所有平台上编写类似的代码.如果没有,Marc的端口可能更加惯用C#开头.(我试图使我的代码"感觉"像普通的C#一样,但设计显然是基于Java代码开始的,故意使得那些使用Java的人也熟悉它.)
当然,其中一个优点是您可以稍后改变主意,并确信所有数据仍然可以通过其他项目有效 - 它们应该是绝对二进制兼容的(就序列化数据而言),就我而言我知道.
根据它的GitHub项目网站 protobuf-csharp-port 现已被纳入主要的Google Protocol Buffers项目,因此它将成为protobuf 3的官方.NET实现.然而,protobuf-net 最后一次更新于2013年,尽管已有最近在GitHub提交了一些提交.
我刚刚从protobuf-csharp-port切换到protobuf-net,因为: