• C#面:简单介绍 序列化 和 反序列化


    序列化:

    是将对象转换为可保持或可传输的形式的过程。

    .NET 具有以下序列化技术:

    • 二进制序列化保持类型保真,这对于多次调用应用程序时保持对象状态非常有用。 例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。 您可以将对象序列化到流、磁盘、内存和网络等。 远程处理使用序列化,“按值”在计算机或应用程序域之间传递对象。
    • XML 和 SOAP 序列化只序列化公共属性和字段,并且不保持类型保真。 当您希望提供或使用数据而不限制使用该数据的应用程序时,这一点非常有用。 由于 XML 是开放式的标准,因此它对于通过 Web 共享数据来说是一个理想选择。 SOAP 同样是开放式的标准,这使它也成为一个理想选择。
    • JSON 序列化只序列化公共属性,并且不保持类型保真。 JSON 是开放式的标准,对于通过 Web 共享数据来说是一个理想选择。

    用到的类:

    System.Runtime.Serialization
    包含可用于序列化和反序列化对象的类。

    System.Xml.Serialization
    包含可用于将对象序列化为 XML 格式的文档或流的类。

    System.Text.Json
    包含可用于将对象序列化为 JSON 格式的文档或流的类。

    反序列化:

    是将流转换为对象的过程。

    这两个过程一起保证能够存储和传输数据。

    注意:

    1. 如果一个类可以序列化,它的子类和包含的各成员对象不一定都可以序列化。如果一个类可以序列化,但其子类或包含的成员对象不满足序列化条件,那么在序列化过程中可能会抛出异常。因此,在设计可序列化的类继承结构时,需要确保所有相关的类都满足序列化条件。
    2. 若要忽略单个属性,请使用 [JsonIgnore] 特性。

    示例: 

    JSON序列化示例:

    1. public class Person
    2. {
    3. public string? Name { get; set; }
    4. public int Age { get; set; }
    5. public DateTimeOffset Date { get; set; }
    6. }
    7. internal class Program
    8. {
    9. static void Main(string[] args)
    10. {
    11. //创建一个Person类的对象
    12. Person person = new Person
    13. {
    14. Name = "大毛",
    15. Age = 10,
    16. Date = DateTime.Now
    17. };
    18. //序列化为JSON
    19. string jsonString = JsonSerializer.Serialize(person);
    20. Console.WriteLine(jsonString);
    21. //{"Name":"\u5927\u6BDB","Age":10,"Date":"2024-03-03T17:01:29.4062255+08:00"}
    22. }
    23. }

    JSON反序列化示例:

    1. public class Person
    2. {
    3. public string? Name { get; set; }
    4. public int Age { get; set; }
    5. public DateTimeOffset Date { get; set; }
    6. }
    7. internal class Program
    8. {
    9. static void Main(string[] args)
    10. {
    11. string jsonString = @"{""Name"":""\u5927\u6BDB"",""Age"":10,""Date"":""2024-03-03T17:01:29.4062255+08:00""}";
    12. Person? person = JsonSerializer.Deserialize(jsonString);
    13. Console.WriteLine($"姓名:{person?.Name}");
    14. Console.WriteLine($"年龄:{person?.Age}");
    15. Console.WriteLine($"创建时间:{person?.Date}");
    16. //姓名: 大毛
    17. //年龄:10
    18. //创建时间:2024 - 03 - 03 17:01:29 + 08:00

  • 相关阅读:
    软件工程国考总结——判断题
    王学岗——H265编码原理详解与码流分析
    yolov8 c++进行部署
    第三章:最新版零基础学习 PYTHON 教程(第二节 - Python 运算符—Python 算术运算符)
    SpringBoot整合RabbitMQ实战附加死信交换机
    【2】SM2验签工具和RSA验签工具
    【校招VIP】前端JS语言考点之选择器和优先级
    SwinTransformer学习记录(一)之整体架构
    微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-中
    ArduPilot飞控AOCODARC-H7DUAL固件编译
  • 原文地址:https://blog.csdn.net/fishandfishand/article/details/136434834