天天看點

C# Protobuf使用指南

一、Protobuf的使用方法

1、protobuf下載下傳與安裝方法

本文使用的protobuf-net v2.4.1版本,下載下傳方法可以自行百度下載下傳。下載下傳解壓之後得到一個檔案夾。之後,

(1)、把Google.ProtocolBuffers.dll、protoc.exe、ProtoGen.exe、ProtoGen.exe.config放于同一個檔案夾之中

(2)、建立一個proto的檔案,其中寫入需要序列化的類

(3)、建立一個bat檔案,寫入:

echo on

protoc --descriptor_set_out=ProtoCSHead.protobin(該處為建立的proto檔案名稱.protobin) --include_imports ProtoCSHead.proto(此處為建立的proto檔案名稱.proto)

protogen ProtoCSHead.protobin(該處為建立的proto檔案名稱.protobin)

注:可以把多個類寫入一個proto檔案之中統一生成類庫

(4)、輕按兩下bat檔案運作即可得到c#的類庫,把該類庫導入解決方案之中即可

(5)、把Google.ProtocolBuffers.dll引入到解決方案之中

2、Protobuf的使用方法

序列化方面:

此處即為把相關類的各個字段填上相應的值,本文用CSHead.proto為例子。

message CSHead{    optional uint32 command     = 1 ;     optional uint32 subcmd      = 2 ;     optional bytes  uuid         = 4 ;     optional uint32 route_key   = 9 ; }

注意:此處command等字段的值為随意填寫,沒有具體意義。

(1)、序列化

            CSHead.Builder myCSHeadBuilder = CSHead.CreateBuilder();            myCSHeadBuilder.SetCommand(1);            myCSHeadBuilder.SetSubcmd(2);            myCSHeadBuilder.SetUuid(ByteString.CopyFrom("3",Encoding.ASCII));            myCSHeadBuilder.SetRouteKey(4);//此處cshead即為序列化後的CSHead類型的字元串            CSHead cshead = myCSHeadBuilder.Build();//此處CSHeadBuffer即為序列化後的位元組數組            byte[] CSHeadBuffer = cshead.ToByteArray();

注意:指派時,對于uint32類型直接按照int型資料指派即可;bytes類型資料在c#中為bytestring類型,指派時需要使用ByteString.CopyForm(string text,encoding)方法來指派,ByteString類型可以通過ToString()方法轉換成string類型,string類型又可以通過相應轉化的方法轉換成int。此處使用哪種序列化後的類型,此處自行選擇。

(2)、反序列化

//此處的head字段為伺服器傳回的位元組數組,cshed即為結果                CSHead cshed = CSHead.ParseFrom(head);//此後可以使用cshed依次讀取每個字段的值,例如: uint aa = cshed.Command;

--------------------- 

作者:0colonel0 

來源:CSDN 

原文:https://blog.csdn.net/sinat_34322082/article/details/53063925 

版權聲明:本文為部落客原創文章,轉載請附上博文連結!