• 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

  • 相关阅读:
    Aspose.Email for Node.js via .NET
    你们的优雅停机真的优雅吗?
    数字孪生技术在光网络中的应用与问题
    Spring学习:二、Bean的管理
    Python 踩坑记 -- 调优
    【进阶篇】使用 Stream 流和 Lambda 组装复杂父子树形结构
    微信小程序备案流程操作详解
    C# AsyncLocal 是如何实现 Thread 间传值
    js正则练习示例
    html&css
  • 原文地址:https://blog.csdn.net/fishandfishand/article/details/136434834