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);
}
从二进制文件反序列化:
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怎么序列化和反序列化一个二进制对象的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441352.html
微信扫一扫
支付宝扫一扫