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++版本方便多了。