新闻中心
.NET怎么序列化和反序列化一个二进制对象_二进制对象序列化方法
答案:.NET中二进制序列化需标记[Serializable]特性,使用BinaryFormatter进行序列化与反序列化,但该方式在.NET Core 3.0及以上版本已被弃用,存在安全风险;推荐新项目采用System.Text.Json、protobuf-net或MessagePack等更安全高效的替代方案。

.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.Se
rialize(fs, person); // 序列化到文件
}
从二进制数据反序列化恢复对象
使用 BinaryFormatter.Deserialize() 方法从流中读取并重建对象。
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
示例:从文件读取并还原 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年值得关注的变现风口分析


2025-11-21
浏览次数:次
返回列表
rialize(fs, person); // 序列化到文件
}