1.序列化的定义方式及应用场景

  1. 1.序列化的定义方式及应用场景
    1. 1.1 题目
    2. 1.2 深入解析
    3. 1.3 答题示例
    4. 1.4 关键词联想

1.序列化的定义方式及应用场景


1.1 题目

序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?


1.2 深入解析

序列化(Serialization)是将内存中的对象状态转换为可存储或传输的格式(如字节流或文本)的过程,反序列化(Deserialization)则是其逆向操作。借助序列化,我们可以方便地实现数据持久化、跨进程或跨网络传输,以及缓存管理等功能。

常见序列化方式及示例:

  1. XML 序列化
    使用 XmlSerializer 将对象转为可读的 XML 文本:

    [Serializable]
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    // 序列化
    var person = new Person { Name = "Alice", Age = 30 };
    var xmlSerializer = new XmlSerializer(typeof(Person));
    using (var stream = new FileStream("person.xml", FileMode.Create))
    {
        xmlSerializer.Serialize(stream, person);
    }
    
    // 反序列化
    using (var stream = new FileStream("person.xml", FileMode.Open))
    {
        var loaded = (Person)xmlSerializer.Deserialize(stream);
    }
    
  2. JSON 序列化
    使用 System.Text.Json(或 Newtonsoft.Json)生成轻量级 JSON 文本:

    // 序列化
    var json = JsonSerializer.Serialize(person);
    File.WriteAllText("person.json", json);
    
    // 反序列化
    var jsonText = File.ReadAllText("person.json");
    var person2 = JsonSerializer.Deserialize<Person>(jsonText);
    
  3. 二进制序列化
    使用 BinaryFormatter(已标记为过时,仅作示例;生产推荐使用安全方案如 protobuf-net):

    var formatter = new BinaryFormatter();
    using (var stream = new FileStream("person.dat", FileMode.Create))
    {
        formatter.Serialize(stream, person);
    }
    
    using (var stream = new FileStream("person.dat", FileMode.Open))
    {
        var person3 = (Person)formatter.Deserialize(stream);
    }
    
  4. 第三方高性能格式
    如 Protobuf(protobuf-net)、MessagePack 等,序列化和反序列化速度快、体积小:

    // 使用 protobuf-net 示例
    using (var stream = new FileStream("person.proto", FileMode.Create))
    {
        Serializer.Serialize(stream, person);
    }
    

使用场景:

  • 数据持久化:保存游戏存档、用户设置到文件或数据库,重启后恢复对象状态。
  • 网络通讯:客户端与服务器之间交换对象数据(Web API、RPC)。
  • 缓存/消息队列:将对象放入分布式缓存或消息中间件,进行跨进程传递。

1.3 答题示例

“序列化是把程序里的对象状态转成可存储或传输的格式,反序列化则是还原对象。常用方式有 XML(XmlSerializer)、JSON(System.Text.Json/Newtonsoft.Json)、二进制(BinaryFormatter,推荐安全替代)、以及 Protobuf/MessagePack 等高性能库。我们在保存游戏进度、Web API 数据交换、缓存和消息队列等场景都会用到。”


1.4 关键词联想

  • 对象 → 字节流/文本
  • 持久化 / 恢复
  • 网络传输 / RPC
  • XML / JSON / 二进制
  • Protobuf / MessagePack
  • 反序列化


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏