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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM