对于新的 .net core 应用程序,我应该在 protobuf-net 和 google.protobuf 之间使用什么 NuGet 包?

Eri*_*let 7 c# performance serialization protobuf-net binary-serialization

对于新的 .net core 应用程序,我应该在 protobuf-net 和 google.protobuf 之间使用什么 NuGet 包?

  • 这是为了“代码第一”,而不是合同第一。
  • 它实际上仅适用于 C#,但如果更多语言可以轻松读取该格式(但不是必须的),那就太好了。对于二进制序列化,我更看重性能而不是可移植性。我还将使用 XML 或 Json 来实现可移植性(我认为这更适合可移植性,尽管速度慢很多)。

Mar*_*ell 14

经过编辑,这变得更加可靠;首先让我们在问题的约束条件下考虑此处显示的选项以及 Google 实现:

  1. Google.Protobuf- 参考实现
  • +坚固、可靠、维护良好
  • -从根本上来说“契约优先”(非托管解析器/生成器),仅限 proto3
  1. protobuf-csharp-port
  • -严格来说,这实际上变成了 Google.Protobuf不使用
  1. SilentOrbit/protobuf
  • -从根本上来说“契约优先”(托管解析器/生成器)
  • (说实话,我对这个了解不多,所以我不会发表太多支持或反对的评论)
  1. protobuf-net
  • +“代码优先”或“合约优先”(可选托管解析器/生成器)
  • +“代码优先”适用于任何 .NET 语言;.proto 模式可以从代码生成,以便与任何其他平台/语言一起使用(标记+是因为根据问题,这是一个非必要的好处)
  • + 维护得相当好(这不是我的日常工作,但我尽力了!)

所以; 鉴于问题说:

这是为了“代码第一”,而不是合同第一。

这似乎成为一个非常简单的选择过程,protobuf-net 是那场比赛中唯一的一匹马。就 .NET Core 而言:protobuf-net 与 .NET Core 完全同步,包括针对 span API 进行了优化,并展望了 .NET 5 / C# 9 功能

附带说明:如果您开始尝试,我建议使用 v3 版本的 protobuf-net 并使用当前定义的最高版本CompatibilityLevel