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 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_31967569/article/details/83185459