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

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);
}

从二进制文件反序列化:

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 17:59:57
下一篇 2025年12月17日 18:00:09

相关推荐

发表回复

登录后才能评论
关注微信