C# 中实现泛型对象与字节数组互转

阿麦
阿麦
发布时间:2026-10-14 | 4人浏览过
原创

本文展示了在 C# 中利用 BinaryFormatter 将任意泛型对象序列化为字节数组,以及从字节数组反序列化为对象的具体实现方法。通过引入 System.IO 和 System.Runtime.Serialization.Formatters.Binary 命名空间,结合 MemoryStream 可在内存中高效完成数据转换。

准备环境

在进行对象序列化操作前,需要确保项目中已引用以下核心命名空间,它们分别用于流处理和二进制格式化:

  • System.IO:提供对数据流和文件系统进行支持的基本类。
  • System.Runtime.Serialization.Formatters.Binary:包含用于二进制序列化的类。

同时,参与序列化的目标类必须标记为 [Serializable],且所有属性也必须是可序列化的类型。

第1步:实现泛型序列化方法

此步骤旨在将传入的任意类型对象(T)转换为 byte[] 字节数组,以便进行后续存储或网络传输。

操作入口:自定义类的公共方法区。

具体动作:

  1. 创建 MemoryStream 实例作为内存中的写入缓冲区。
  2. 实例化 BinaryFormatter 对象以处理格式控制。
  3. 调用 bFormatter.Serialize 方法,将对象 t 写入流中。
  4. 返回内存流的字节缓冲区。
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

// 假设该方法位于某个类内部
protected byte[] Serialize<T>(T t)
{
    MemoryStream mStream = new MemoryStream();
    BinaryFormatter bFormatter = new BinaryFormatter();
    bFormatter.Serialize(mStream, t);
    return mStream.GetBuffer();
}

第2步:实现泛型反序列化方法

此步骤接收之前生成的字节数组,并将其还原为原始的泛型对象 T。

操作入口:自定义类的公共方法区。

具体动作:

  1. 根据输入的字节数组 b 创建一个新的 MemoryStream。
  2. 实例化 BinaryFormatter 对象。
  3. 调用 Deserialize 方法读取流数据,并将结果强制转换为类型 T。
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

protected T Deserialize<T>(byte[] b)
{
    BinaryFormatter bFormatter = new BinaryFormatter();
    return (T)bFormatter.Deserialize(new MemoryStream(b));
}

注意事项与排错

在使用上述方法时,需注意以下关键点以确保操作的稳定性:

  • 类标记要求:所有要被序列化的实体类都必须添加 [Serializable] 特性,否则在序列化时会抛出异常。
  • 版本兼容性:BinaryFormatter 在某些新版本的 .NET 环境中可能存在安全限制或已过时的警告。若遇到兼容性错误,建议考虑使用 System.Text.Json 或 Newtonsoft.Json 等现代序列化库,或者升级/降级对应的 .NET Framework/Core 版本至兼容状态。
  • 空指针处理:反序列化时若传入空数组 null 或长度不足的数组,程序可能崩溃。建议在实际应用中加入非空判断。

简要总结

以上就是 C# 泛型序列化对象为字节数组的详细内容,更多关于 C# 序列化与反序列化技术资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表