学习protobuf的过程中踩了不少的坑,这篇博文算是一个小结吧!
环境:
1 windows 10 2 VisualStudio 2017 3 Google.Protobuf.Tools.3.9.1 4 Google.Protobuf.3.9.1
其中,Google.Protobuf.Tools.3.9.1与Google.Protobuf.3.9.1这两个程序集都是通过NuGet下载的,使用的是proto3协议,与proto2协议有些与不同,博文的后续有相关的体现。
编译:
1.构建.proto文件
这里先构建一个普通的.proto文件,文件名为MyRequest.proto,文件内容如下:
1 syntax = "proto3"; 2 3 message SearchRequest { 4 string query = 1; 5 int32 page_number = 2; 6 int32 result_per_page = 3; 7 }
这种标记文件的语法网上有很多,童靴们可以自己搜索。
这里需要注意的是,文件首个非空、非注释的行必须注明pb的版本,即syntax = "proto3";
,否则默认版本是proto2。
2.生成对应cs文件
按照下面的命令生成对应的cs文件。
protoc --csharp_out=./ MyRequest.proto
这里需要使用Google.Protobuf.Tools.3.9.1(位于该项目的package文件夹内)程序集下的protoc程序,可以使用protoc --help查看该程序的使用方法。
应用
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 var s = new SearchRequest(); 6 s.Query = "haha"; 7 s.ResultPerPage = 0; 8 s.PageNumber = 0; 9 byte[] bs = s.ToByteArray(); 10 var d = new SearchRequest(); 11 //获取到字节数组后,就可以反序列化为一个对象了 12 d.MergeFrom(bs); 13 Console.WriteLine(d.Query); 14 Console.ReadKey(); 15 } 16 }