当前位置: 首页 > backend >正文

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

什么是序列化?


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

什么是反序列化?


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

 常用的序列化技术


1.JSON

  • 优点:轻量级、易读性强、人类和机器都易于解析。
  • 应用:广泛用于Web API、配置文件和移动应用的数据交换。
  • 使用: System.Text.Json
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
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));// 序列化到XMLusing (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.复制对象

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

序列化缺点 


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

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

http://www.xdnf.cn/news/430.html

相关文章:

  • 基于Redis的3种分布式ID生成策略
  • 多线程——阻塞队列(六)
  • LeetCode(Hot.2)—— 49.字符异位词分组题解
  • ARINC818-实现
  • ueditorplus编辑器已增加AI智能
  • UI键盘操作
  • 计算机网络期中复习笔记(自用)
  • 【技术派后端篇】 Redis 实现用户活跃度排行榜
  • 【UniApp】Vue2 scss 预编译器默认已由 node-sass 更换为 dart-sass
  • 如何优雅地为 Axios 配置失败重试与最大尝试次数
  • PG,TRPO,PPO,GRPO,DPO原理梳理
  • Windows桌面图标变白的解决方案
  • 不连续数据区间天数累计sql
  • Python制作简易PDF查看工具PDFViewerV1.0显示优化
  • HTML5+CSS3小实例:CSS立方体
  • 【Lua语言】Lua语言快速入门
  • redis和lua为什么能实现事务
  • 在STM32的定时器外设中,选择使用哪个外部时钟配置函数
  • 猫咪如厕检测与分类识别系统系列【十二】猫咪进出事件逻辑及日志优化
  • 【sylar-webserver】8 HOOK模块
  • Linux-进度条小程序
  • 【笔记】网路安全管理-实操
  • FiftyOne 管理数据
  • React-useRef
  • 实现Azure Data Factory安全地请求企业内部API返回数据
  • 图灵奖得主LeCun:DeepSeek开源在产品层是一种竞争,但在基础方法层更像是一种合作;新一代AI将情感化
  • Ubuntu20.04下Docker方案实现多平台SDK编译
  • 国网B接口协议图像数据上报通知接口流程详解以及上报失败原因(电网B接口)
  • 【LeetCode 热题 100】双指针 系列
  • 【leetcode100】分割等和子集