答案:.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.Serialize(fs, person); // 序列化到文件}
从二进制数据反序列化恢复对象
使用 BinaryFormatter.Deserialize() 方法从流中读取并重建对象。
示例:从文件读取并还原 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(file);}
基本上就这些。对于老项目可继续使用 BinaryFormatter,但注意安全限制;新项目建议采用更现代、安全的序列化方式。操作不复杂但容易忽略类型标记和兼容性问题。
以上就是.NET怎么序列化和反序列化一个二进制对象_二进制对象序列化方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441943.html
微信扫一扫
支付宝扫一扫