全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#怎么实现Protobuf序列化 C# Protobuf-net使用方法

推荐使用protobuf-net实现C# Protobuf序列化,它无需protoc编译器,通过[ProtoContract]和[ProtoMember(n)]特性标记类与成员,支持高效二进制序列化/反序列化,并提供版本兼容、性能优化等进阶功能。

在C#中使用Protobuf序列化,推荐用 protobuf-net(由Marc Gravell维护),它不依赖官方protoc编译器,支持直接通过特性(Attribute)标记类,轻量、高效、易集成。

1. 安装 protobuf-net 包

在项目中通过NuGet安装:

  • Visual Studio:工具 → NuGet包管理器 → 管理解决方案的NuGet包 → 搜索并安装 protobuf-net
  • 命令行(.NET CLI):dotnet add package protobuf-net

2. 定义可序列化的类

[ProtoContract] 标记类,用 [ProtoMember(n)] 标记字段或属性,序号 n 必须唯一且建议从1开始(兼容Protocol Buffers规范):

[ProtoContract]
public class Person
{
    [ProtoMember(1)]
    public int Id { get; set; }

    [ProtoMember(2)]
    public string Name { get; set; }

    [ProtoMember(3)]
    public DateTime BirthDate { get; set; }
}

⚠ 注意:字段/属性必须是public,或配合[ProtoInclude][ProtoIgnore]等做更细控制;不支持自动属性无getter/setter(如public string Name { get; }会报错)。

3. 序列化与反序列化操作

使用 Serializer 静态类完成二进制读写:

  • 序列化(对象 → byte[]):Serializer.Serialize(stream, obj)
  • 反序列化(byte[] → 对象):Serializer.Deserialize(stream)

示例:

var person = new Person { Id = 123, Name = "张三", BirthDate = new DateTime(1990, 5, 1) };

// 序列化到内存流
using var ms = new MemoryStream();
Serializer.Serialize(ms, person);
byte[] data = ms.ToArray();

// 反序列化回来
using var ms2 = new MemoryStream(data);
Person restored = Serializer.Deserialize(ms2);

4. 进阶提示(实用但易忽略)

• 默认不支持Dictionary和多维数组:需手动处理或改用 List> + 自定义转换。

• 版本兼容靠字段序号,不是字段名:新增字段加新序号、旧字段不要删或改序号,可设 [ProtoMember(4, IsRequired = false, Default = 0)] 提高健壮性。

• 性能优化建议:对高频类型可预生成序列化器(RuntimeTypeModel.Default.Add(typeof(Person)).CompileInPlace();),避免运行时反射开销。

基本上就这些。不需要写 .proto 文件,也不用跑 protoc,适合快速上手和中小规模数据交换场景。


# 工具  # ai  # stream  # c#  # .net  # red  # String  # 多维数组  # public  # Attribute  # 对象  # default  # typeof  # visual studio  # 性能优化  # 序列化  # 进阶  # 不支持  # 多维  # 推荐使用  # 自定义  # 管理器  # 不需  # 报错  # 它不 


相关文章: 电商网站制作价格怎么算,网上拍卖流程以及规则?  上海网站制作开发公司,上海买房比较好的网站有哪些?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  建站之星多图banner生成与模板自定义指南  如何快速登录WAP自助建站平台?  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何选择靠谱的建站公司加盟品牌?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何快速搭建FTP站点实现文件共享?  外贸公司网站制作哪家好,maersk船公司官网?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  如何配置支付宝与微信支付功能?  自助网站制作软件,个人如何自助建网站?  装修招标网站设计制作流程,装修招标流程?  移民网站制作流程,怎么看加拿大移民官网?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  nginx修改上传文件大小限制的方法  网站图片在线制作软件,怎么在图片上做链接?  建站VPS配置与SEO优化指南:关键词排名提升策略  网站制作话术技巧,网站推广做的好怎么话术?  如何通过山东自助建站平台快速注册域名?  如何在万网自助建站平台快速创建网站?  购物网站制作公司有哪些,哪个购物网站比较好?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  如何在IIS中配置站点IP、端口及主机头?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何在橙子建站上传落地页?操作指南详解  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  如何快速启动建站代理加盟业务?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  建站之星展会模版如何一键下载生成?  php json中文编码为null的解决办法  SQL查询语句优化的实用方法总结  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  建站上市公司网站建设方案与SEO优化服务定制指南  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  建站主机选购指南:核心配置与性价比推荐解析  如何在西部数码注册域名并快速搭建网站?  如何基于云服务器快速搭建个人网站?  建站主机是否等同于虚拟主机?  建站主机无法访问?如何排查域名与服务器问题  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  定制建站是什么?如何实现个性化需求?  建站之星导航菜单设置与功能模块配置全攻略 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。