我最近不得不寻找最初由 Google 开发的 Protocol Buffers 库的 C# 移植。你猜怎么着,我在这里发现了两个由两个非常知名的人拥有的项目:protobuf-csharp-端口 http://code.google.com/p/protobuf-csharp-port/,写者乔恩·斯基特 https://stackoverflow.com/users/22656/jon-skeet and protobuf网络 http://code.google.com/p/protobuf-net/,写者马克·格拉维尔 https://stackoverflow.com/users/23354/marc-gravell。我的问题很简单:我必须选择哪一个?
我非常喜欢 Marc 的解决方案,因为它在我看来更接近 C# 哲学(例如,您可以只向现有类的属性添加属性),并且看起来它可以支持 .NET 内置类型,例如 System.Guid。
我确信它们都是很棒的项目,但您对此有何看法?
我同意乔恩的观点;如果您在多个环境中进行编码,那么他的版本为您提供了与其他“核心”实现类似的 API。 protobuf-net 与大多数 .NET 序列化器的实现方式更加相似,因此 .NET 开发人员更熟悉(IMO)。正如 Jon 所说 - 原始二进制输出should是相同的,以便您可以在以后需要时使用不同的 API 重新实现。
关于 protobuf-net 的一些要点是specific对于这个实现:
- 与existing类型(不仅仅是从 .proto 生成的类型)
- 在 WCF 和 memcached 等环境下工作
- 可以用来实现
ISerializable
对于现有类型
- 支持继承*和序列化回调方法
- 支持常见模式,例如
ShouldSerialize[name]
- 适用于现有的装饰类型(
XmlType
/XmlElement
or DataContract
/DataMember
) - 意味着(例如)LINQ-to-SQL 模型可以开箱即用地序列化(只要在 DBML 中启用了序列化)
- 在 v2 中,适用于没有任何属性的 POCO 类型
- 在 v2 中,适用于 .NET 1.1(不确定这是一个巨大的卖点)和大多数其他框架(包括 monotouch - 耶!)
-
possibly(尚未实现)v2 可能支持全图*序列化(不仅仅是树序列化)
(*=这些功能使用 100% 有效的 protobuf 二进制文件,但可能很难从其他语言中使用)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)