ProtoBuf 对象转换
(运行场景 所有设备启动后 需要不间断的发送请求 然后接收请求 获取很多设备的运行状态 )
通过与采集工控机去对接 对方工程师要求用ProtoBuf去转换对象传送数据 说是运行起来 会比json节省资源 速度会比json反应快些
回来查资料学习了一下
需要一下几步
第一步 创建 .proto 文件
//交互接口协议 syntax = "proto3"; package dome_mm; message sss_c { int32 s1 = 1; string s2 = 2; double s3 = 3; }
详细说明下
syntax = "proto3"; 交互接口协议
dome_mm 是命名空间
sss_c 对象类
s1,s2,s3 字段
第二步 运行生成 .cs 类
这里运行时只运行 protoc.exe这个程序
https://github.com/protocolbuffers/protobuf/releases/tag/v3.8.0
东西在这里面下载 我用的是这个protoc-3.8.0-win64.zip
然后进入命令窗口 cd+空格+文件夹路径 跳到protoc.exe程序文件夹
输入 protoc ./test.proto --csharp_out=./
test.proto是创建的.proto文件
执行命令后 会生成 .cs 文件 直接扔到项目中
第三步 编写序列化和反序列化类
public class Protobuff { /// <summary> /// 序列化 /// </summary> public static byte[] Serialize<T>(T obj) where T : IMessage { return obj.ToByteArray(); } /// <summary> /// 反序列化 /// </summary> public static T Deserialize<T>(byte[] data) where T : class, IMessage, new() { T obj = new T(); IMessage message = obj.Descriptor.Parser.ParseFrom(data); return message as T; } }
第四步 可以肆无忌惮的使用了
sss_c sc = new sss_c(); //对象序列化 var bytes = Protobuff.Serialize<sss_c>(sc); //对象反序列化 var recv = Protobuff.Deserialize<sss_c>(buff);