学习protobuf的过程中踩了不少的坑,这篇博文算是一个小结吧!

环境:

 windows
VisualStudio
Google.Protobuf.Tools.3.9.
Google.Protobuf.3.9.

其中,Google.Protobuf.Tools.3.9.1与Google.Protobuf.3.9.1这两个程序集都是通过NuGet下载的,使用的是proto3协议,与proto2协议有些与不同,博文的后续有相关的体现。

编译:

1.构建.proto文件

这里先构建一个普通的.proto文件,文件名为MyRequest.proto,文件内容如下:

 syntax = "proto3";

 message SearchRequest {
string query = ;
int32 page_number = ;
int32 result_per_page = ;
}

这种标记文件的语法网上有很多,童靴们可以自己搜索。

这里需要注意的是,文件首个非空、非注释的行必须注明pb的版本,即syntax = "proto3";,否则默认版本是proto2。

2.生成对应cs文件

按照下面的命令生成对应的cs文件。

protoc --csharp_out=./ MyRequest.proto

这里需要使用Google.Protobuf.Tools.3.9.1(位于该项目的package文件夹内)程序集下的protoc程序,可以使用protoc --help查看该程序的使用方法。

应用

 class Program
{
static void Main(string[] args)
{
var s = new SearchRequest();
s.Query = "haha";
s.ResultPerPage = ;
s.PageNumber = ;
byte[] bs = s.ToByteArray();
var d = new SearchRequest();
//获取到字节数组后,就可以反序列化为一个对象了
d.MergeFrom(bs);
Console.WriteLine(d.Query);
Console.ReadKey();
}
}

protobuf3的学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. JS window对象 返回浏览历史中的其他页面 go()方法,根据当前所处的页面,加载 history 列表中的某个具体的页面。 语法: window.history.go(number);

    返回浏览历史中的其他页面 go()方法,根据当前所处的页面,加载 history 列表中的某个具体的页面. 语法: window.history.go(number); 参数: 浏览器中,返回当前页面 ...

  2. idea 右键没有class文件的问题,,

    修改文件夹的  属性  蓝色即为java代码,,绿色为test,,等等

  3. 浅谈JAVA线程

    一.线程(Thread) 1.线程 线程:是指程序中的顺序流 多线程:一个程序中的多个顺序流同时执行 (1)线程的状态: 新生 就绪 运行 阻塞 终止 (2)学习多线程: 1)线程的创建 2)线程的状 ...

  4. php操作redis--集合(set)篇

    常用函数:sAdd,sMembers,sPop,sUnion等 应用场景:与list类型类似,是一个列表的功能,不同的是set可以自动排重,提供了一个判断某一个成员是否存在一个set集合内的重要接口. ...

  5. Windows win32 API 类库 硬件

    // 硬件 Win32_Processor, // CPU 处理器 Win32_PhysicalMemory, // 物理内存条 Win32_Keyboard, // 键盘 Win32_Pointin ...

  6. Vue学习笔记【25】——Vue组件(组件间传值)

    父组件向子组件传值 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据  <script>    // 创建 Vue 实例,得到 ViewModel    var ...

  7. RAM SSO功能重磅发布 —— 满足客户使用企业本地账号登录阿里云

    阿里云RAM (Resource Access Management)为客户提供身份与访问控制管理服务.使用RAM,可以轻松创建并管理您的用户(比如雇员.企业开发的应用程序),并控制用户对云资源的访问 ...

  8. BZOJ 3252: 攻略(思路题)

    传送门 解题思路 比较好想的一道思路题,结果有个地方没开\(long\) \(long\) \(wa\)了三次..其实就是模仿一下树链剖分,重新定义重儿子,一个点的重儿子为所有儿子中到叶节点权值最大的 ...

  9. 【BZOJ1084】dp

    题目很简单 分析蛮无聊的一道题.状态转移十分显然然后就做完了. #include <bits/stdc++.h>#define sc(n) scanf("%d",&am ...

  10. Openfire部署(一)

    1.从官网下载openfire_4_1_4.tar.gz文件: 2.上传到linux上,解压缩 3.启动openfire [root@localhost opt]# cd openfire/bin [ ...