当我们要使用protobuf进行协议编写,且需要协议在网络中传输的时候,就需要将类或者xxx.proto 文件序列化
当需要将类序列化,且使用protobuf的时候,我们需要引入Google.Protobuf.Tools 3.6.1 和 protobuf-portable-net 2.0.0.668 这两个库,版本根据需要自行选择
引入类库完成后,将需要序列化的类添加注解,例如下方类
[ProtoContract] //该注解就表示该类是protobuffer 需要序列化的类
public class TestProtobuf
{
[ProtoMember(1)] // 每个属性都加上这个
public string Name { get; set; }
[ProtoMember(2)]
public int Age { get; set; }
[ProtoMember(3)]
public string Describe { get; set; }
}
下面是序列化 和 反序列化的方法
private static byte[] Serialize(object t)
{
using (MemoryStream ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, t);
byte[] bytes = new byte[ms.Length];
ms.Position = 0;
ms.Read(bytes, 0, bytes.Length);
return bytes;
}
}
private static byte[] Serialize(object t)
{
using (MemoryStream ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, t);
byte[] bytes = new byte[ms.Length];
ms.Position = 0;
ms.Read(bytes, 0, bytes.Length);
return bytes;
}
}
当我们需要将xxx.proto生成的xxx.cs文件序列化的时候
//这是我们xxx.proto 生成LoginExample 生成的类
Test.LoginExample loginExample = new Test.LoginExample();
loginExample.Loginid = 1;
loginExample.Loginname = "Success";
loginExample.LoginInfo = "This is Test Example Please Say 6 6 6";
//直接进行序列化
byte[] bytes = loginExample.ToByteArray();
//直接进行反序列化
LoginExample v = LoginExample.Parser.ParseFrom(bytes);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)