码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2018-06-28 11:01:40      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:google   一个   python   方式   password   17.   下载地址   json   amp   

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文件内容如下

技术分享图片 View Code

但是这样一个一个的用命令行导出实在太麻烦,作为会偷懒的程序员,我们要使用更快速的方式批量生成,这个时候我们想到了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
技术分享图片

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

标签:google   一个   python   方式   password   17.   下载地址   json   amp   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!