转自:https://www.cnblogs.com/Leo_wl/p/7126321.html#_labelTop
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类文件
但是这样一个一个的用命令行导出实在太麻烦,作为会偷懒的程序员,我们要使用更快速的方式批量生成,这个时候我们想到了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
以上BAT以及demo的下载地址:http://pan.baidu.com/s/1pLtWTy7
搞定!