C# 中的数据序列化与反序列化
C# 中的数据序列化和反序列化,或者说在任何编程语言中,都是处理和转换 JSON、XML 或二进制数据到不同格式的方法。
什么是序列化?
C# 中的数据序列化是将对象转换为可以轻松存储或传输为 JSON、XML 或二进制格式的过程。
它允许您将对象数据保存到文件、通过网络发送,或存储到数据库中。
例如:将 C# 对象转换为 JSON 字符串或 XML 文档。
什么是反序列化?
C# 中的反序列化是序列化的逆过程。它将存储或传输的数据(JSON/XML)转换回 C# 对象,从而使应用程序能够轻松读取、处理和重用结构化数据。
例如:将 JSON 或 XML 字符串转换回 C# class 对象。
为什么序列化与反序列化很重要
序列化和反序列化都很重要,原因如下 −
- 实现在应用程序或系统之间的数据传输。
- 支持持久化存储(保存和加载数据)。
- 允许使用 JSON 和 XML 等标准格式与 API 进行通信。
- 简化应用程序中的配置管理和状态保存。
示例:C# 中的数据序列化与反序列化
在以下示例中,我们开发一个 C# 应用程序,用于序列化和反序列化存储在 JSON 和 XML 格式中的数据。
文件夹结构
让我们查看 "JsonXmlSerializationApp" 的以下文件夹结构 −
文件:"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" 项目中的数据处理。