新闻中心

.NET怎么序列化和反序列化一个二进制对象

2025-11-06
浏览次数:
返回列表
BinaryFormatter 虽可序列化二进制对象,但已过时且不安全;2. 推荐使用 protobuf-net 实现高效、跨平台序列化;3. 类需标记 [Serializable] 或 [ProtoContract],字段按序标注以确保兼容性。

.net怎么序列化和反序列化一个二进制对象

在 .NET 中,要序列化和反序列化一个二进制对象,可以使用 BinaryFormatter 类。虽然它在较新版本的 .NET(如 .NET 5+)中已被标记为过时并默认禁用,但在某些旧项目或特定场景下仍可使用。推荐方式是使用更安全、性能更好的替代方案,比如 System.Text.Json 或第三方库如 protobuf-net。下面先介绍 BinaryFormatter 的基本用法,再给出现代推荐做法。

使用 BinaryFormatter 进行二进制序列化与反序列化

注意:BinaryFormatter 存在安全风险,不建议用于不可信数据,且在 .NET Core/.NET 5+ 中默认禁用。

要使用 BinaryFormatter,目标类必须加上 [Serializable] 特性。

示例代码:

[Serializable]
public class Person
{
   public string Name { get; set; }
   public int Age { get; set; }
}

序列化到二进制文件:

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

var person = new Person { Name = "张三", Age = 30 };
using (var fs = new FileStream("person.bin", FileMode.Create))
{
   var formatter = new BinaryFormatter();
   formatter.Serialize(fs, person);
}

从二进制文件反序列化:

刺鸟创客 刺鸟创客

一款专业高效稳定的AI内容创作平台

刺鸟创客 110 查看详情 刺鸟创客 using (var fs = new FileStream("person.bin", FileMode.Open))
{
   var formatter = new BinaryFormatter();
   var person = (Person)formatter.Deserialize(fs);
   Console.WriteLine($"{person.Name}, {person.Age}");
}

推荐方式:使用 protobuf-net(高效且跨平台)

更现代、安全且高效的二进制序列化方式是使用 protobuf-net 库,它基于 Google Protocol Buffers,支持 .NET Framework 和 .NET Core/5+。

安装 NuGet 包: Install-Package protobuf-net

使用示例: using ProtoBuf;

[ProtoContract]
public class Person
{
   [ProtoMember(1)]
   public string Name { get; set; }

   [ProtoMember(2)]
   public int Age { get; set; }
}

序列化:

using (var file = File.Create("person.pb"))
{
   Serializer.Serialize(file, person);
}

反序列化:

using (var file = File.OpenRead("person.pb"))
{
   var person = Serializer.Deserialize(file);
   Console.WriteLine($"{person.Name}, {person.Age}");
}

小结

- BinaryFormatter 简单但不安全,已过时,仅适用于旧项目。 - 推荐使用 protobuf-net 实现高性能、跨平台的二进制序列化。 - 标记字段顺序(如 ProtoMember(1))有助于兼容性。 - 所有需要序列化的类型都应正确标注特性。

基本上就这些。根据项目环境选择合适的方式即可。

以上就是.NET怎么序列化和反序列化一个二进制对象的详细内容,更多请关注其它相关文章!


# 适用于  # 企业网站推广选哪家好点  # 网站建设选择乐云seo  # 重庆新型seo推广  # 安阳整体推广招聘网站有哪些  # 推广文章需要做哪些营销  # 适合公司推广的网站  # 购物网站建设机构  # 常州seo公司优选火星  # 壁纸品牌营销公众号推广  # 网站优化推广价位  # 中文网  # 相关文章  # js  # 但在  # 已被  # 如何在  # 操作指南  # 如何将  # 推荐使用  # 序列化  # .net  # google  # stream  # go  # json 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 12306怎么选座位选到安静区_12306选座安静区域选择策略  C++如何实现单例模式_C++设计模式之线程安全的单例写法  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  浏览器打开即用 美图秀秀网页版入口  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  J*aScript类型检查_j*ascript代码规范  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  CSS布局中意外空白:解决padding-top导致的顶部间距问题  iwriter统一登录平台 iwrite账号密码登录页面  从J*aScript对象中精确提取指定属性的教程  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  GemBox Document HTML转PDF垂直文本渲染问题及解决方案  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  word中如何让数字纵向排列_Word数字纵向排列方法  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  PySpark中从现有列右侧提取可变长度字符创建新列的教程  Go RPC HTTP服务正确实现与常见陷阱解析  必由学在线入口 必由学网页版快速登录入口  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  Eclipse怎么运行工程_Eclipse工程运行配置说明  抖音极速版最新版本 抖音极速版官方下载地址  QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  蛙漫官方正版入口 蛙漫网页在线全集免费观看  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  深入理解J*a编译器的兼容性选项:从-source到--release  WordPress插件开发:正确注册卸载钩子与避免常见陷阱  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  葱吃多了会怎样 葱吃多了会伤胃吗  J*aScript动态修改指定div内所有a标签样式指南  顺丰快件物流信息 官方网站查询入口  NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制  谷歌google账号怎么注册账号 谷歌账号注册官方流程  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题  C++如何生成随机数_C++ random库使用方法与范围设置  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  构建轻量级网站内部消息系统:Formspree 集成指南  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  如何在Promise链中有效终止错误处理后的执行  《GTA6》开发画面疑似泄露!这次可不是AI了 

搜索