在开发 C# 应用程序时,我们经常需要将对象保存到文件、数据库或通过网络传输。这时,C#二进制序列化就派上了用场。然而,未经处理的二进制数据往往体积较大,不仅占用更多磁盘空间,还会拖慢网络传输速度。为了解决这个问题,我们可以对序列化后的数据进行压缩处理。
本教程将手把手教你如何在 C# 中实现二进制序列化并结合 GZipStream 进行高效压缩,即使是编程新手也能轻松上手!
原始的二进制序列化虽然速度快,但生成的数据通常未经过优化,尤其当对象包含大量重复字符串或数值时,体积会显著膨胀。通过引入压缩机制(如 GZip),我们可以将数据体积减少 50% 甚至更多,从而提升应用的性能和用户体验。
首先,确保你的类标记了 [Serializable] 特性,这是 C# 二进制序列化的前提。
[Serializable]public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }} 我们将使用 BinaryFormatter(注意:在 .NET Core/.NET 5+ 中已弃用,建议使用 System.Text.Json 或第三方库如 protobuf-net;但为教学目的,此处仍演示其用法)配合 GZipStream 来压缩数据。
using System;using System.IO;using System.IO.Compression;using System.Runtime.Serialization.Formatters.Binary;public static byte[] CompressAndSerialize(object obj){ using (var memoryStream = new MemoryStream()) { // 创建 GZip 压缩流 using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress)) { // 创建二进制格式化器 var formatter = new BinaryFormatter(); // 将对象序列化到 GZip 流中 formatter.Serialize(gzipStream, obj); } // 返回压缩后的字节数组 return memoryStream.ToArray(); }} 读取压缩数据时,需先解压再反序列化:
public static T DecompressAndDeserialize<T>(byte[] compressedData){ using (var memoryStream = new MemoryStream(compressedData)) { // 创建 GZip 解压流 using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress)) { var formatter = new BinaryFormatter(); // 反序列化对象 return (T)formatter.Deserialize(gzipStream); } }} class Program{ static void Main() { var person = new Person { Name = "张三", Age = 30, Email = "zhangsan@example.com" }; // 序列化并压缩 byte[] compressed = CompressAndSerialize(person); Console.WriteLine($"压缩后大小: {compressed.Length} 字节"); // 解压并反序列化 Person restored = DecompressAndDeserialize<Person>(compressed); Console.WriteLine($"恢复对象: {restored.Name}, {restored.Age}岁"); }} BinaryFormatter,因其存在反序列化漏洞。生产环境建议改用更安全的替代方案,如 System.Text.Json + 手动压缩,或使用 MessagePack、protobuf-net 等现代序列化库。try-catch 块以处理序列化/压缩过程中的异常。通过结合 C#二进制序列化 与 GZip压缩序列化,我们可以显著减小数据体积,提升应用的存储和传输效率。尽管 BinaryFormatter 存在局限性,但本教程所展示的“序列化 → 压缩”和“解压 → 反序列化”的模式,同样适用于其他更安全的序列化框架。
掌握这项技术,不仅能优化你的应用程序,还能深入理解数据持久化与网络通信的核心原理。希望这篇关于 C#高性能序列化 的入门指南对你有所帮助!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025128660.html