zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    .Net常识之 浅析as和is操作符
    使用com object 控制outlook
    override 和 new 关键字的总结
    interface Virtual and abstract
    SQL Server 索引结构及其使用(四)
    ASP。NET的设计思想
    系统性能的提升之二"聚集索引"的建立
    SQL Server 索引结构及其使用(一)
    form 中加上target
    创建多维ArrayList的方法
  • 原文地址:https://www.cnblogs.com/yy15611/p/13562972.html
Copyright © 2011-2022 走看看