ProtoBuf

Posted by 戚骏 on April 14, 2021

安装

github下载protoc-3.15.8-win64.zip

解压后,将/protoc-3.15.8-win64/bin所在目录添加到环境变量

Demo

  • 新建一个myproto.proto文件,内容如下:
syntax = "proto3";
package my;

message pb_team_info {
    string team_id = 1;
    string leader_id = 2;
    repeated string members = 3;
    int32 status = 4;
}

syntax = “proto3”; 表示使用版本V3,不再支持required、optional等关键字,所有字段都有默认值 package my; 定义类的命名空间

  • 命令行输入
protoc .\myproto.proto --csharp_out=.

生成Myproto.cs

  • 项目添加Myproto.cs,测试
pb_team_info teamInfo = new pb_team_info();
teamInfo.LeaderId = "2222";
teamInfo.Members.Add("aaa");
teamInfo.Members.Add("bbb");
teamInfo.Status = 1;
teamInfo.TeamId = "myteam";

var datas = teamInfo.ToByteArray();
var str = teamInfo.ToString();

pb_team_info tb = new pb_team_info();
tb.MergeFrom(datas);

var jp = JsonConvert.DeserializeObject<pb_team_info>(str);

ToByteArray方法生成字节数据,可用于构造出新的对象 ToString方法会将对象json化成字符串

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override string ToString() {
  return pb::JsonFormatter.ToDiagnosticString(this);
}