新闻中心

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

2025-11-21
浏览次数:
返回列表
答案:.NET中二进制序列化需标记[Serializable]特性,使用BinaryFormatter进行序列化与反序列化,但该方式在.NET Core 3.0及以上版本已被弃用,存在安全风险;推荐新项目采用System.Text.Json、protobuf-net或MessagePack等更安全高效的替代方案。

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

.NET 中序列化和反序列化二进制对象主要通过 BinaryFormatter 类实现,它可以将对象转换为二进制流,便于存储或传输。虽然 .NET Core 3.0 及以上版本已弃用 BinaryFormatter(出于安全考虑),但在某些旧项目或特定场景中仍可使用。以下是具体操作方法。

启用二进制序列化的前提

要对一个类进行二进制序列化,该类必须标记 [Serializable] 特性,否则会抛出异常。

注意:如果类中包含敏感字段,可以使用 [NonSerialized] 标记避免被序列化。

示例类定义:

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

    [NonSerialized]
    private string password; // 不会被序列化
}

序列化对象为二进制数据

使用 BinaryFormatter.Serialize() 方法将对象写入文件或内存流。

示例:将 Person 对象保存为二进制文件

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

Person person = new Person { Name = "张三", Age = 25 };

using (FileStream fs = new FileStream("person.dat", FileMode.Create))
{
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(fs, person); // 序列化到文件
}

从二进制数据反序列化恢复对象

使用 BinaryFormatter.Deserialize() 方法从流中读取并重建对象。

CA.LA CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA

示例:从文件读取并还原 Person 对象

using (FileStream fs = new FileStream("person.dat", FileMode.Open))
{
    BinaryFormatter formatter = new BinaryFormatter();
    Person restoredPerson = (Person)formatter.Deserialize(fs); // 反序列化

    Console.WriteLine($"姓名: {restoredPerson.Name}, 年龄: {restoredPerson.Age}");
}

替代方案(推荐用于新项目)

由于 BinaryFormatter 存在安全风险且已被弃用,建议在新项目中使用以下替代方式:

  • System.Text.Json:支持高性能 JSON 序列化(文本格式)
  • protobuf-net:基于 Protocol Buffers 的高效二进制序列化库
  • MessagePack:轻量快速的二进制序列化格式

protobuf-net 为例,需先安装 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.bin"))
{
    Serializer.Serialize(file, person);
}

// 反序列化
using (var file = File.OpenRead("person.bin"))
{
    Person restored = Serializer.Deserialize<Person>(file);
}

基本上就这些。对于老项目可继续使用 BinaryFormatter,但注意安全限制;新项目建议采用更现代、安全的序列化方式。操作不复杂但容易忽略类型标记和兼容性问题。

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


# 解决问题  # 跳出率高的网站如何优化  # 网站建设昆山博敏  # 上海抖音付费营销推广中心  # 旅游海外营销推广  # 怎样自己做交友网站推广  # 网站推广办理流程怎么写  # 江门全网营销seo排名  # 枣庄万洲网站建设  # 静安区优化推广网站平台  # 台州营销推广多难  # 可以使用  # 它可以  # word  # 中文网  # 相关文章  # 但在  # 二进制数  # 如何将  # 已被  # 序列化  # red  # .net  # stream  # json  # js 


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


相关推荐: win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  最新韩小圈网页版登录入口_官网在线观看官方链接  如何仅使用CSS更改登录界面背景图像图标的颜色  处理动态列数据:J*a ArrayList的正确初始化与字符累加教程  C++ explicit关键字防止隐式转换_C++构造函数安全规范  小米汽车11月交付量突破40000台!雷军:将继续努力  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  知音漫客正版漫画平台_知音漫客官网账号登录  在python-socketio事件处理器中安全访问Flask应用上下文  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  Python多线程中正确使用sigwait处理SIGALRM信号  Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值  wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  J*aScript动态修改指定div内所有a标签样式指南  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  2025-2030年全球乘用车销量预测:新能源成增长主力  Tabulator表格中精确实现日期时间排序的指南  C++ string find函数返回值npos详解_C++字符串查找失败的判断条件  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  知音漫客官网漫画下载_知音漫客网页版阅读记录  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  利用5118提升短视频内容效果_5118短视频关键词优化方法  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  如何使用纯J*aScript判断Input元素是否在特定类容器内  Animex动漫社网入口地址 Animex动漫社网正版在线入口  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  深入理解Promise链:如何在catch后中断then的执行  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  Archive of Our Own官网直达 AO3最新可用地址一览  三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】  服务端验证_j*ascript输入检查  2026春节假期时间安排 2026春节假日查询  J*aScript异步迭代器_j*ascript异步遍历  探索高级语言到原生C/C++的转译:挑战与内存管理策略  一加 14R 快充无反应_一加 14R 充电优化  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  J*aScript实现单选按钮与关联输入框的联动禁用教程  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  React Hooks最佳实践:动态组件状态管理的组件化方案  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  批改网学生版PC登录 批改网官网登录系统入口  mc.js免安装版 mc.js一键畅玩入口  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析 

搜索