代码之家  ›  专栏  ›  技术社区  ›  pierroz

如何在protobuf csharp端口和protobuf net之间进行选择

  •  61
  • pierroz  · 技术社区  · 16 年前

    protobuf-csharp-port ,作者 Jon Skeet protobuf-net Marc Gravell . 我的问题很简单:我必须选择哪一个?

    我非常喜欢Marc的解决方案,因为在我看来,它更接近C#philophy(例如,您可以只向现有类的属性添加属性),而且它看起来可以支持.NET内置类型,如System.Guid。

    我相信他们都是非常伟大的项目,但你的机会是什么?

    5 回复  |  直到 9 年前
        1
  •  66
  •   Marc Gravell    16 年前

    应该 如果以后需要,可以使用不同的API重新实现。

    有些点是协议网 具体的

    • 使用 现有的 类型(不只是从.proto生成的类型)
    • 在类似WCF和memcached的环境下工作
    • 可用于实现 ISerializable 对于现有类型
    • 支持常见模式,例如 ShouldSerialize[name]
    • 使用现有装饰类型( XmlType XmlElement DataContract DataMember )-意味着(例如)LINQ到SQL模型可以开箱即用地序列化(只要在DBML中启用了序列化)
    • 在v2中,适用于没有任何属性的POCO类型
    • 在v2中,它适用于.NET1.1(不确定这是否是一个非常畅销的功能)和大多数其他框架(包括monotouch-yay!)
    • 可能地 (尚未实现)v2可能支持完整的graph*序列化(而不仅仅是树序列化)

        2
  •  46
  •   Jon Skeet    16 年前

    你在项目中也使用其他语言吗?如果是这样,我的C#端口将允许您在所有平台上编写类似的代码。如果不是的话,Marc的端口很可能是更惯用的C语言(我试着让我的代码“感觉”像普通的C#,但设计显然是基于Java代码开始的,故意让那些使用Java的人也熟悉它。)

    当然,这样做的好处之一是,您可以稍后改变主意,并确信您的所有数据通过另一个项目仍然有效—据我所知,它们应该是绝对二进制兼容的(就序列化数据而言)。

        3
  •  9
  •   Silas    11 年前

    根据它的 GitHub project site protobuf csharp端口 现在已经被合并到主要的Google协议缓冲区项目中 last updated in 2013 ,尽管 some commits recently in GitHub .

        4
  •  7
  •   Nick    16 年前

    我刚从protobuf csharp端口切换到protobuf net,因为:

    • 如果你想编译protobuf csharp port.proto文件,你必须做两个步骤,即用protoc编译到.protobin,然后用protoGen编译。protobuf-net一步到位。
        5
  •  3
  •   juanagui    14 年前

    在我的例子中,我想使用协议缓冲区来替换.net客户端和j2ee后端之间基于xml的通信模型。因为我已经在使用代码生成,所以我将使用Jon的实现。

    对于不需要java互操作的项目,我会选择Marc的实现,特别是因为v2允许在没有注释的情况下工作。