随笔 - 3461, 文章 - 0, 评论 - 739, 阅读 - 1200万
  管理

C#序列化和反序列化

Posted on   lzhdim  阅读(86)  评论(0编辑  收藏  举报

在C#编程中,序列化和反序列化是两个核心概念,它们分别代表着将对象状态转换为可以存储或传输的形式(通常是字节流),以及将这种形式的数据恢复为原始对象状态的过程。简单来说,序列化就是将对象转换为流(如文件、网络流等),而反序列化则是将这些流转换回原始对象。

为什么要序列化和反序列化?

  • 数据存储:将对象状态保存到文件或数据库中,以便稍后重新加载和使用。
  • 网络传输:通过序列化,可以将对象状态转换为字节流,通过网络发送到另一台机器,然后在那边进行反序列化。
  • 对象深拷贝:创建对象的完全独立副本。

序列化

在C#中,可以通过多种方式序列化对象,比如使用BinaryFormatterXmlSerializerJson.NET(Newtonsoft.Json)或C#内置的System.Text.Json等。

使用BinaryFormatter进行序列化

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable] // 对象需要标记为可序列化
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class SerializationExample
{
    public static void Main()
    {
        Person person = new Person { Name = "Alice", Age = 30 };

        // 序列化对象到内存流
        using (MemoryStream ms = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(ms, person);

            // 获取序列化后的字节数组
            byte[] serializedData = ms.ToArray();

            // 通常这里可以将serializedData保存到文件或发送到网络
        }
    }
}

反序列化

反序列化是将序列化的数据转换回原始对象的过程。

使用BinaryFormatter进行反序列化

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class DeserializationExample
{
    public static void Main()
    {
        // 假设我们有一个之前序列化过的字节数组
        byte[] serializedData = ...; // 从文件或网络加载的序列化数据

        // 反序列化字节数组到对象
        using (MemoryStream ms = new MemoryStream(serializedData))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            Person deserializedPerson = (Person)formatter.Deserialize(ms);

            // 现在deserializedPerson包含了原始Person对象的数据
            Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        }
    }
}

注意事项

  1. 安全性:某些序列化方式(如BinaryFormatter)可能存在安全漏洞。在安全性要求较高的场景下,建议使用更加安全的序列化方式,如System.Text.JsonNewtonsoft.Json

  2. 跨平台兼容性:不同的序列化方式在不同的平台和语言上的支持程度可能不同。例如,BinaryFormatter是特定于.NET的,而JSON则更加通用。

  3. 版本兼容性:当序列化的对象在不同版本的应用程序之间传输时,需要确保序列化和反序列化双方都使用了兼容的序列化方式。

序列化和反序列化是C#编程中处理对象持久化和跨平台通信的重要技术。通过选择合适的序列化方式,并遵循最佳实践,可以确保数据的正确性和安全性。

(评论功能已被禁用)
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2009-03-02 如何选择合适的MySQL存储引擎
2009-03-02 SQL Server 2008 数据挖掘的概念
2009-03-02 配置归档日志,让数据库管理更加顺畅
2009-03-02 jQuery插件 - Flash Embed
2025年3月8日 星期六 【蛇】己卯月丙子日 乙巳年 二月初九 妇女节
您的IP:18.219.34.138,操作系统:未知操作系统,浏览器:未知浏览器
Copyright (C) 2000-2025 Lzhdim Software All Rights Reserved
点击右上角即可分享
微信分享提示