C# 数据序列化与反序列化怎么做?

文章导读
Previous Quiz Next C# 中的数据序列化和反序列化,或者说在任何编程语言中,都是处理和转换 JSON、XML 或二进制数据到不同格式的方法。
📋 目录
  1. 什么是序列化?
  2. 什么是反序列化?
  3. 为什么序列化与反序列化很重要
  4. 示例:C# 中的数据序列化与反序列化
  5. Conclusion
A A

C# 中的数据序列化与反序列化



Previous
Quiz
Next

C# 中的数据序列化和反序列化,或者说在任何编程语言中,都是处理和转换 JSON、XML 或二进制数据到不同格式的方法。

什么是序列化?

C# 中的数据序列化是将对象转换为可以轻松存储或传输为 JSON、XML 或二进制格式的过程。

它允许您将对象数据保存到文件、通过网络发送,或存储到数据库中。

例如:将 C# 对象转换为 JSON 字符串或 XML 文档。

什么是反序列化?

C# 中的反序列化是序列化的逆过程。它将存储或传输的数据(JSON/XML)转换回 C# 对象,从而使应用程序能够轻松读取、处理和重用结构化数据。

例如:将 JSONXML 字符串转换回 C# class 对象。

为什么序列化与反序列化很重要

序列化和反序列化都很重要,原因如下 −

  • 实现在应用程序或系统之间的数据传输。
  • 支持持久化存储(保存和加载数据)。
  • 允许使用 JSON 和 XML 等标准格式与 API 进行通信。
  • 简化应用程序中的配置管理和状态保存。

示例:C# 中的数据序列化与反序列化

在以下示例中,我们开发一个 C# 应用程序,用于序列化和反序列化存储在 JSON 和 XML 格式中的数据。

文件夹结构

让我们查看 "JsonXmlSerializationApp" 的以下文件夹结构 −

data_serialization_and_deserialization

文件:"Company.cs" 是一个模型文件,您将在其中定义程序处理的数据结构的 class。

namespace JsonXmlSerializationApp.Models {
   public class Company {
      public string Name { get; set; }
      public string Location { get; set; }
      public string Headquarter { get; set; }
   }
}

文件 − "JsonService.cs" 在此文件中,您将序列化和反序列化 JSON 数据。

using System;
using System.IO;
using System.Text.Json;
using JsonXmlSerializationApp.Models;

namespace JsonXmlSerializationApp.Services {
   public static class JsonService {
      private static readonly string filePath = "company.json";

      // 将 Company 对象序列化为 JSON 文件
      public static void SerializeToJson(Company company) {
         string jsonData = JsonSerializer.Serialize(company, new JsonSerializerOptions { WriteIndented = true });
         File.WriteAllText(filePath, jsonData);
         Console.WriteLine("JSON Serialization complete. Data saved to company.json");
      }

      // 将 JSON 文件反序列化为 Company 对象
      public static void DeserializeFromJson() {
         if (File.Exists(filePath)) {
            string jsonData = File.ReadAllText(filePath);
            Company company = JsonSerializer.Deserialize<Company>(jsonData);
            Console.WriteLine("JSON Deserialization complete:");
            Console.WriteLine($"Name: {company.Name}, Location: {company.Location}, Headquarter: {company.Headquarter}");
         }
         else {
            Console.WriteLine("JSON file not found!");
         }
      }
   }
}

文件 − "XmlService.cs" 在此文件中,您将序列化和反序列化 XML 数据。

using System;
using System.IO;
using System.Xml.Serialization;
using JsonXmlSerializationApp.Models;

namespace JsonXmlSerializationApp.Services {
   public static class XmlService {
      private static readonly string filePath = "company.xml";

      // 将 Company 对象序列化为 XML 文件
      public static void SerializeToXml(Company company) {
         XmlSerializer serializer = new XmlSerializer(typeof(Company));
         using (FileStream fs = new FileStream(filePath, FileMode.Create)) {
            serializer.Serialize(fs, company);
         }
         Console.WriteLine("XML Serialization complete. Data saved to company.xml");
      }

      // 将 XML 文件反序列化为 Company 对象
      public static void DeserializeFromXml() {
         if (File.Exists(filePath)) {
            XmlSerializer serializer = new XmlSerializer(typeof(Company));
            using (FileStream fs = new FileStream(filePath, FileMode.Open)){
               Company company = (Company)serializer.Deserialize(fs);
               Console.WriteLine("XML Deserialization complete:");
               Console.WriteLine($"Name: {company.Name}, Location: {company.Location}, Headquarter: {company.Headquarter}");
            }
         }
         else {
            Console.WriteLine("XML file not found!");
         }
      }
   }
}

文件 − "Program.cs" 是 .NET 应用程序的主要入口点,程序执行从这里开始。

using System;
using JsonXmlSerializationApp.Models;
using JsonXmlSerializationApp.Services;

namespace JsonXmlSerializationApp {
   class Program {
      static void Main(string[] args) {
         // 创建一个 Company 对象
         Company company = new Company {
            Name = "",
            Location = "Madhapur, Hyderabad",
            Headquarter = "Hyderabad, India"
         };

         Console.WriteLine("=== JSON Handling ===");
         JsonService.SerializeToJson(company);
         JsonService.DeserializeFromJson();

         Console.WriteLine("\n=== XML Handling ===");
         XmlService.SerializeToXml(company);
         XmlService.DeserializeFromXml();
      }
   }
}

输出 − 使用此命令 "dotnet run" 运行应用程序。

=== JSON Handling ===
JSON Serialization complete. Data saved to company.json
JSON Deserialization complete:
Name: , Location: Madhapur, Hyderabad, Headquarter: Hyderabad, India

=== XML Handling ===
XML Serialization complete. Data saved to company.xml
XML Deserialization complete:
Name: , Location: Madhapur, Hyderabad, Headquarter: Hyderabad, India

Conclusion

C# 中数据的序列化和反序列化对于快速存储、交换和传输数据非常重要。借助内置库如 "System.Text.Json" 和 "System.Xml.Serialization",开发者可以快速将数据转换为 JSON 或 XML 格式,并在需要时恢复它们。这种方法简化了实际 ".NET" 项目中的数据处理。