C#学习第17天:序列化和反序列化

什么是序列化?


  • **定义:**序列化是指把对象转换为一种可以轻松存储或传输的格式,如JSON、XML或二进制格式。这个过程需要捕获对象的类型信息和数据内容。
  • **用途:**使得对象可以持久化到文件、发送至网络、或存储在数据库中。

什么是反序列化?


  • **定义:**反序列化是将序列化的数据格式转换回对象实例的过程。这个过程包括重新创建对象实例,并设置其属性值。
  • **用途:**重建对象,使之在不同环境或应用中继续使用。

常用的序列化技术


1.JSON

  • 优点:轻量级、易读性强、人类和机器都易于解析。
  • 应用:广泛用于Web API、配置文件和移动应用的数据交换。
  • 使用: System.Text.Json
cs 复制代码
using System;
using System.Text.Json;

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

class Program
{
    static void Main()
    {
        // 创建对象
        Product product = new Product { Name = "Laptop", Price = 999.99m };

        // 序列化为JSON字符串
        string jsonString = JsonSerializer.Serialize(product);
        Console.WriteLine($"Serialized JSON: {jsonString}");

        // 反序列化为对象
        Product deserializedProduct = JsonSerializer.Deserialize<Product>(jsonString);
        Console.WriteLine($"Deserialized Product: {deserializedProduct.Name}, {deserializedProduct.Price}");
    }
}

2.XML

  • 优点:自描述性强,支持复杂结构和多种数据类型。
  • 应用:数据存储、通信协议、配置文件。
  • 使用: System.Xml.Serialization
cs 复制代码
using System;
using System.IO;
using System.Xml.Serialization;

public class Customer
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

class Program
{
    static void Main()
    {
        // 创建对象
        Customer customer = new Customer { FirstName = "John", LastName = "Doe" };
        
        XmlSerializer serializer = new XmlSerializer(typeof(Customer));

        // 序列化到XML
        using (StringWriter writer = new StringWriter())
        {
            serializer.Serialize(writer, customer);
            string xmlString = writer.ToString();
            Console.WriteLine($"Serialized XML: {xmlString}");

            // 反序列化回对象
            using (StringReader reader = new StringReader(xmlString))
            {
                Customer deserializedCustomer = (Customer)serializer.Deserialize(reader);
                Console.WriteLine($"Deserialized Customer: {deserializedCustomer.FirstName}, {deserializedCustomer.LastName}");
            }
        }
    }
}

应用场景


1.数据存储

  • 将对象持久化到文件系统,以便后续恢复。

2.网络传输

  • 在分布式系统中,将对象通过网络传输到其他服务。

3.缓存

  • 将复杂对象序列化后存储在内存中,提高读取速度。

4.复制对象

  • 深拷贝对象,通过序列化和反序列化创建新实例。

序列化缺点


  • 可能带来性能开销,特别是对于大型复杂对象。
  • 数据安全:序列化的数据可能被截获,需要考虑加密。
  • 兼容性问题:不同版本的程序可能导致序列化格式不兼容。

通过掌握这些概念和技术,您可以更好地处理软件开发中的数据持久化和传输问题。如果有任何问题或想要进一步讨论,请随时告诉我!

相关推荐
2301_763994717 分钟前
类和对象(下)
开发语言·c++
Dreamsi_zh9 分钟前
Python爬虫04_Requests豆瓣电影爬取
开发语言·爬虫·python
rannn_11110 分钟前
【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)
数据库·笔记·后端·学习·mysql
绿炮火17 分钟前
【MATLAB】(一)简介
开发语言·数学建模·matlab
超浪的晨18 分钟前
JavaWeb 进阶:Vue.js 与 Spring Boot 全栈开发实战(Java 开发者视角)
java·开发语言·前端·javascript·vue.js·html·个人开发
醉卧红尘的鱼21 分钟前
最优估计准则与方法(5)加权最小二乘估计(WLS)_学习笔记
学习·算法
她说人狗殊途28 分钟前
Map 集合
java·开发语言·算法
EndingCoder1 小时前
Three.js + AI:结合 Stable Diffusion 生成纹理贴图
开发语言·前端·javascript·人工智能·stable diffusion·ecmascript·three.js
leafpipi1 小时前
【机器学习】pycharm使用SSH SFTP 远程连接 ubuntu服务器 进行开发+调试+数据训练
服务器·学习·算法·ubuntu·pycharm·ssh
Chef_Chen1 小时前
从0开始学习R语言--Day62--RE插补
开发语言·学习·r语言