1. Google ProtoBuf 在TensorFlow,Caffe等深度學習框架中,都有用到這種序列化方法,不同於json的是,ProtoBuf的存儲是基於二進制的,這樣的好處是能夠大幅節省空間,對於需要網絡傳輸的場景更為重要,但是這樣也帶來一個問題,基於字符串存儲的json對於完全不懂得json格式的人也是可讀取的,通過觀察文件的結構,甚至可以寫一些簡單的處理程序,然而protobuf的文件根本無法通過其他方法正常讀取.
2.准備工作 Visual Studio NuGet安裝:Google.Protobuf和Google.Protobuf.Tools 最終要的是,要准備好.proto文件
3. 關於proto文件 使用ProtoBuf主要有兩個操作,序列化和解序列化,這兩個操作都需要協議描述文件也就是.proto文件,如果要使用protobuf存儲自定義的數據,就要自己編寫proto文件,如果要讀取其他的ProtoBuf序列化文件,例如TensorFlow中的模型文件.pb,就要先知道要讀取的ProtoBuf序列化文件的協議,也就是要獲得對應的.proto文件,這是一個必須條件,沒有對應的proto文件,就無法正確打開ProtoBuf序列化文件.
4. 使用步驟 4.1 安裝Google.Protobuf和Google.Protobuf.Tools的Nuget包 4.2 在Google.Protobuf.Tools下找到編譯工具protoc.exe 4.3 准備好協議描述文件xx.proto,需要注意的是,proto文件之間可以互相引用,要正常使用,必須把所有相關的proto文件都准備好. 4.4 生成解碼器 建立兩個文件夾,一個名為src,一個名為gen 把准備好的proto文件全部放到src中 運行命令:.\protoc.exe --proto_path=src --csharp_out=gen xx.proto 把所有的proto文件都生成一遍. 在gen文件夾中,會發現有等量的cs文件,這就是對應的解碼器,我們要把他們放進自己的工程中. 4.5 打開安裝了Google.Protobuf和Google.Protobuf.Tools的Nuget包的C#工程,把剛剛生成的解碼器導入工程中.
5.關鍵代碼 網絡上有關C#和ProtoBuf 的文章比較混亂,大多數都不是基於Google的官方版本的,在這里我給出的建議是,使用官方的版本和API,這樣不但能使用到最新的特性,還能保證讀取的兼容性. protobuf項目地址 在release中下載C#版本,解壓后,在CSharp/src文件夾中有一個解決方案,打開它,就能得到在C#下使用Google官方的protobuf的實現的方法,代碼很長,此處不贅述.
6.友情提示 有的教程中使用到了CodeGen這個工具,這個項目已經很久不更新了,現在已經不支持protobuf3.0,大家最好不要使用,還有一些教程使用到了其他的Nuget包,我這里也不推薦使用,使用這些第三方包都需要進行一些額外操作,或者需要在編寫協議描述文件是進行一些特殊標注,這在解讀其他程序生成的proto文件時會遇到很大的問題,總之,使用官方的包和代碼,就沒有問題了,而且比較簡單.具體的API,在protocol-buffers官網可以找到,全文地址請點擊:https://blog.csdn.net/Angle_Cal/article/details/82821124?utm_source=copy
--------------------- 本文來自 安娜學姐 的CSDN 博客

實際使用時要在protoc.exe中打開cmd進行轉化 (輸入文中提到的命令注意文件地址不要錯錯了生成不了)
還要注意最最重要的一點一定不要在有命名為漢字的文件夾下使用否則永遠都不會生成類,只會報找不到文件的錯誤
