【protobuf进阶】通过.proto文件导出C#支持的.cs类文件

protobuf是一个跨平台的消息交互协议,类似xml、json等。

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

github上相关开源项目代码:http://pan.baidu.com/s/1eSDSb5o

下面演示如何将protobuf的消息体导出成C#支持的.cs类

首先我们获取到如下.proto文件

package hrv;

option java_package = "com.******.****.***.protobuf";
option java_outer_classname = "RequestProto";

message Request {
    extensions 100 to max;
    enum Type {
        LOGIN = 0;
        CHANGE_PASSWORD = 1;
        START_SCALE = 2;
        STOP_SCALE = 3;
        DATA_PPG = 4;
        DATA_EP = 5;
        DATA_HRV = 6;
        DATA_IBI = 7;
        MARK_SCALE = 8;
        RESOURCE_LIST = 9;
        UPDATE_USER_INFO = 10;
        GET_SCALE_LIST = 11;
        GET_SCALE = 12;
    }
    required Type type = 1;
    optional string timestamp = 2;
}

然后下载导出工具 ProtoGen.exe 下载地址: http://pan.baidu.com/s/1eRIv3oe

通过CMD命令行进入到该目录

使用如下命令行导出.cs文件

protogen.exe  -i:Request.proto    -o:Request.cs

命令解释

protogen -i:test.proto -o:test.cs -ns:UGE.Metadata -p:import=UGE

这句话的意思是, 输入test.proto文件, 给我生成 test.cs 文件, 代码在 namespace UGE.Metadata里, 顺便引用下 using UGE.

可以看到在同目录下生成了一个Request.cs文件,这个文件就是我们想要的cs类文件

Request.cs文件内容如下

 

但是这样一个一个的用命令行导出实在太麻烦,作为会偷懒的程序员,我们要使用更快速的方式批量生成,这个时候我们想到了BAT批处理

echo on

set Path=ProtoGen\protogen.exe

%Path%  -i:Request.proto    -o:OpenAPIModel\Request.cs

%Path%  -i:Response.proto    -o:OpenAPIModel\Response.cs

%Path%  -i:UserInfo.proto    -o:OpenAPIModel\UserInfo.cs

%Path%  -i:LoginReq.proto    -o:OpenAPIModel\LoginReq.cs

%Path%  -i:LoginResp.proto    -o:OpenAPIModel\LoginResp.cs

pause

上面的批处理文件将所有的.proto文件到出成.cs类文件。

或者直接遍历某个文件夹下的所有.prot文件,全部转换

@echo off

set Path=ProtoGen\protogen.exe

for /f "delims=" %%i in (‘dir /b proto "proto/*.proto"‘) do %Path% -i:proto/%%i -o:cs/%%~ni.cs

pause

原文地址:https://www.cnblogs.com/nafio/p/9237420.html

时间: 2024-11-09 02:50:48

【protobuf进阶】通过.proto文件导出C#支持的.cs类文件的相关文章

Github使用.gitignore文件忽略不必要上传的文件 (转)

原文地址: https://blog.csdn.net/gjy211/article/details/51607347 常用编程语言及各种框架平台下的通用   .gitignore   文件 https://github.com/guojun007/gitignore (1).gitignore介绍 在工程实现过程中,会生成一些中间文件,或者在项目中的部分文件是不需要进行版本管理的.对于这些文件应该对于Github来讲是透明的.Github提供这种功能,可以自己指定哪些文件可以不被管理.具体方法

Markdown文件导出为HTML的小程序

Markdown文件导出为HTML的小程序 为什么做 最近把一些学习经验记下来,总结成MarkDown文件,不知不觉已经有12篇了. Sublime Text 的 MarkDown Preview 插件能够将MarkDown语法转换为HTML,并提供三种预览方式:浏览器预览.保存为HTML文件.输出到Sublime的新标签页. 但有一个缺点是,我有12个MarkDown文件,想分别转换为HTML文件,需要重复执行12次打开文件->Crtl+P调出命令面板->输入MarkDown Preview

用php导入10W条+ 级别的csv大文件数据到mysql。导出10W+级别数据到csv文件

转自:http://blog.csdn.net/think2me/article/details/12999907 1. 说说csv 和 Excel 这两者都是我们平时导出或者导入数据一般用到的载体.两者有什么区别呢?csv 格式更兼容一点.那么共同点都是GBK格式的,非UTF8.所以我们上传文件的时候,老是出现乱码,就是编码问题没有转好导致. 2. 推荐的几种方法 1. 函数 fgetss($handel);  返回字符串.它就是strip_tags(fget($handel))的组合读取cs

通用的C#导出Excel 支持2003及2007以上版本

将数据导出到Excel,供用户下载是经常要使用到的一个功能,我这里进行了一些封装,目前已满足项目中导出的需求,使用DataReader导出Excel,支持自定义多表头,使用委托处理字段格式化及字段值的计算: 导出执行的代码如下: /// <summary> /// 将DataReader数据写入到 excel book 中 /// 一般数据量小的导出用这个就可以啦 /// </summary> /// <param name="dataReader">

让你的Photoshop编辑制作ICO格式图标文件(ICOFormat支持图标文件插件)

相信很多制图的朋友都喜欢用PS,但是你能用Photoshop保存为ICO格式图标文件吗?默认肯定不行,不知道是什么原因,大名鼎鼎的图像编辑软件Adobe Photoshop一直不支持导入导出ico格式图标文件. 不过还好,ps支持插件,有了一个名为ICOFormat的插件,IcoFormat是一款可以让Photoshop支持ICO和CUR格式的PS插件,有了它就可以直接从ps里打开.保存ico和cur格式文件了. 一起来看看ICOFormat:让Photoshop支持导入导出ico和cur格式文

C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图

C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图 +BIT祝威+悄悄在此留下版了个权的信息说: 最近需要用OpenGL绘制文字,这是个很费时费力的事.一般的思路就是解析TTF文件从而得到字形的贴图,然后通过OpenGL绘制贴图的方式显示文字. 本篇记录了解析TTF文件并把所有字形安排到一张大贴图上的过程. 使用FreeType 想从零开始解析TTF文件是一个比较大的工程,所以目前就借助FreeType.FreeType是一个开源的跨平台的TTF文件解析器.当然

JAVA实用案例之文件导出(JasperReport踩坑实录)

写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六月份的时候写过一篇利用poi文件导入导出的小Demo,JAVA实用案例之文件导入导出(POI方式). 虽然简单,但是企业应用的原理基本上也就是这样,只不过是封装的更好些,不像我之前写的那样每个Cell都需要定义,其实poi的方式也是我目前最推崇的方式之一了.主要原因是jxl不支持xlsx,Jaspe

java根据模板文件导出pdf

原文:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模板,有的只是随便把数据放里面生成文件,完全不考虑数据怎样放置的以及以后的维护性,想想还是自己总结一个完全版的导出pdf的工具类吧,总结一下网上的方法,加上自己的完善. 本次完善综合特点: 一对一,点对点的给对应的地方写值,比如模板里面放了个name标识,在程序里把"张三"赋给name,那么

【Python学习】使用Pyinstaller将py文件导出为exe文件

PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,但是它不是跨编译的,也就是说在Windows下用PyInstaller生成的exe只能运行在Windows下,在Linux下生成的只能运行在Linux下. Pyinstaller的安装 直接使用pip install pyinstaller即可. 在windows下,pyinstaller需要PyWin32的支持.当用pip安装pyinstaller时未找到PyWin32,会自动安装pypiwin32. Py