C#下使用protobuf(Google Protocol Buffers)

本文介绍了如何在C#环境下利用Google Protocol Buffers(protobuf)进行数据序列化。通过示例展示了如何定义.proto文件,以及如何使用protoc生成C#代码,并利用protogen工具进行不同格式的输出,包括.cs代码文件、XML文件,并讨论了数据契约和可观察对象的选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。除了比Json、XML有速度上的优势和使用上的方便外,protocolbuf还可以做到向前兼容和向后兼容。
        protobuf 虽然只支持JAVA、C++和Pyton,但protobuf社区的protobuf.net组件让protobuf可以支持更多的语言,其中就包括了C#。

protobuf协议
定义protobuf协议必须创建一个以.proto为后缀的文件,以本篇 创建了一个名为myproto.proto的文件,如下:

  1. package ProtoTest;  
  2.   
  3. message TestInfo{  
  4.  required string test = 1;  
  5.  optional int32 num = 2;  
  6. }  
  7.   
  8. message Msg{  
  9.  required int32 id = 1;  
  10.  optional TestInfo msg = 2;  
  11.  optional string str = 3 [defalut="Test String"];  
  12. }  
package ProtoTest;

message TestInfo{
 required string test = 1;
 optional int32 num = 2;
}

message Msg{
 required int32 id = 1;
 optional TestInfo msg = 2;
 optional string str = 3 [defalut="Test String"];
}



package在Java里面代表这个文件所在的包名,在c#里面代表该文件的命名空间,message代表一个类, required 代表该字段必填,optional 代表该字段可选,并可以为其设置默认值,string的默认值格式为[defalut="字符串"]  整型的默认值格式为[defalut=23333]
下面是protobuf在.proto文件中的字段类型转换表:


.proto Type

Notes

C++ Type

Java Type

Python Type[2]

double

double

double

float

float

float

float

float

int32

Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值