C#使用ProtoBuf


1. Google ProtoBuf
经过测试,protobuf比json存储效率还是要高,即时号称最快的fastjson也没有protobuf快,这里为了使用 c#做一个客户端兼容,所以也需要使用protobuf。

2.准备工作
 

Visual Studio 2017
NuGet安装:Google.Protobuf、Google.Protobuf.Tools
根据协议设计并编写.proto文件

3. 使用步骤
3.1 安装Google.Protobuf和Google.Protobuf.Tools的Nuget包
3.2 在Google.Protobuf.Tools下找到编译工具protoc.exe
3.3 准备好协议描述文件xx.proto,需要注意的是,proto文件之间可以互相引用,要正常使用,必须把所有相关的proto文件都准备好.


3.4 生成解码器

.\protoc.exe --proto_path=src --csharp_out=gen xx.proto

这里src是proto文件目录,gen是生成的cs文件目录,也可以使用当前目录./

3.5 安装到项目后,会自动在bin目录生成相关的动态链接库


5.关键代码
网络上有关C#和ProtoBuf 的文章比较混乱,大多数都不是基于Google的官方版本的,在这里我给出的建议是,使用官方的版本和API,这样不但能使用到最新的特性,还能保证读取的兼容性.

官网链接 https://developers.google.com/protocol-buffers/

解码:从数据库读出字节流,转为JSON

 // 比如我定义了一个message LINKINFO_EX,这里从接收或者数据库读字节流解析
 LINKINFO_EX linkinfo = LINKINFO_EX.Parser.ParseFrom(dataInfo);

 // 这里直接转为json 
 this.Info = linkinfo.ToString();

编码:这里是将json转为字节流

 LINKINFO_EX linkinfo = LINKINFO_EX.Parser.ParseJson(json: Info);
 this.lenInfo = linkinfo.CalculateSize();
 this.dataInfo = new byte[lenInfo];
 linkinfo.WriteTo(dataInfo);

真是比c++版本方便多了。

 

你可能感兴趣的:(cs,protobuf)