2010-10-11 148 views
14

我們正在尋找使用谷歌的協議緩衝區來處理C++應用程序和c#應用程序之間通過網絡的序列化。谷歌的協議緩衝區在c#

我的問題是,我發現了幾個不同的c#的版本。這兩個看起來不錯,但是,沒有人知道什麼是不同的(如果有的話)兩個

  1. protobuf-net
  2. jskeet/dotnet-protobufs
+7

第一個是由[Marc Gravell](http://stackoverflow.com/users/23354/marc-gravell)(在這裏排名第二)和第二個是由[Jon Skeet]寫的( http://stackoverflow.com/users/22656/jon-skeet)(在這裏聲望排名第一)。儘管我從來沒有使用過這兩種方法,但我敢打賭,你們不可能出錯。 – 2010-10-11 16:38:00

+2

鑑於Jon Skeet實際上是爲Google工作的,我會先嚐試他的版本。 – Gabe 2010-10-11 16:52:07

+3

但哪個更好?只有一種方法可以找出......戰鬥! (如果你知道Harry Hill是誰,這可能是有道理的 - 否則它可能聽起來異常激進......) – 2010-10-11 18:28:59

回答

13

當然之間; dotnet-protobufs是java版本的一個端口,因此與核心谷歌實現共享一個非常相似的API和方法;代碼寶石,不變性等

Protobuf-net是字節兼容的,但是是一個完整的從零開始的重新實現,遵循標準的.NET成語 - 所以XmlSerializer的用戶很熟悉等。它也可以針對mutable對象(和不可改變根據設定,並在V2結構),並具有WCF,遠程可選鉤等

兩者都可以從.proto工作(可以說是DOTNET-protobufs在這方面比protobuf- 更好淨);但protobuf網可以與現有的.net poco/DTO等工作,沒有.proto或任何codegen。

此外,protobuf-net提供諸如繼承支持之類的東西,但您可能不會選擇在您的場景中使用它,因爲它無法輕鬆映射到.proto定義。