新闻中心
.NET怎么序列化和反序列化一个二进制对象
BinaryFormatter 虽可序列化二进制对象,但已过时且不安全;2. 推荐使用 protobuf-net 实现高效、跨平台序列化;3. 类需标记 [Serializable] 或 [ProtoContract],字段按序标注以确保兼容性。

在 .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
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了


2025-11-06
浏览次数:次
返回列表