我必須使用Google協議緩衝區的proto2版本向其他團隊發送消息。他們在Linux上使用Java和C++。我在Windows上使用C#。Proto2與C#中的Proto3相比較
喬恩斯基特的protobuf的-CSHARP端口(https://github.com/jskeet/protobuf-csharp-port)支持proto2。如果我理解正確,Google已將此代碼並將其更新版本摺疊到主protobuf項目(https://github.com/google/protobuf/tree/master/csharp)中。但它不再支持C#的proto2,只支持proto3。
我不知道我應該使用哪個項目。看起來新的支持將得到更好的支持(如果其他團隊進行升級,則可以支持proto3)。但是我必須將我從proto2提供的.proto文件轉換爲proto3,並冒任何與此相關的問題。
我讀過,在大多數情況下,對於proto2和proto3消息是兼容的。我沒有協議緩衝區的經驗,但我正在使用的.proto文件看起來很漂亮,沒有默認值,也沒有嵌套任何東西。因此,我似乎可以刪除他們的「必需」和「可選」關鍵字,並使用新的庫,將其視爲proto3文件。
在您看來,使用較新的庫是否值得麻煩?是否有一個proto功能列表可以使proto2和proto3消息不兼容?
仍然無法相信他們擺脫了默認設置:( –
[proto2](https://developers.google.com/protocol-buffers/docs/proto)的語言指南將地圖列爲支持。嘗試使用proto編譯器3與[proto3](https://developers.google.com/protocol-buffers/docs/proto3#default),它似乎忽略設置爲默認值的字段(int與0已從二進制和json中刪除表示) – Manoj
@Manoj:我認爲它們在某種程度上受到支持,但不是所有語言都支持,而且很可能有稍微不同的語義。不知道你的意思是「它似乎忽略用默認值設置的字段」。只是意味着「值0沒有序列化」,那麼你是對的 –