首页 > 数据库 > 数据库开发技术 > 什么是序列化和反序列化?
序列化(Serialization)是指将对象转换成可以存储或传输的格式的过程。在计算机科学中,由于对象在内存中的表现形式与它在磁盘上或网络传输中的表现形式不同,因此需要将对象序列化成字节流或者其他形式,以便于存储或传输。序列化可以使得对象的属性和数据结构得以保存,同时也可以加密或压缩数据,以提高存储和传输效率。
反序列化(Deserialization)则是指将序列化后的数据还原成原始的对象的过程。反序列化的过程可以将序列化后的数据转换回原始的对象,恢复对象的属性和数据结构,以便于进行操作或者进一步的处理。
序列化和反序列化通常用于不同的场景,比如在分布式系统中,由于不同的计算机之间需要传输数据,因此需要将数据序列化后传输,接收方再对数据进行反序列化;在进行持久化存储时,需要将对象序列化后存储到数据库或者文件中,以便于后续的读取和操作。常见的序列化格式有XML、JSON、二进制等。
在 C# 中,实现序列化和反序列化可以使用 .NET Framework 提供的序列化类库,如 XmlSerializer、DataContractSerializer 等。
以下是使用 XmlSerializer 实现序列化和反序列化的示例代码:
using System;
using System.IO;
using System.Xml.Serialization;
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
// 创建一个 Person 对象
Person person = new Person { Name = "Tom", Age = 20 };
// 创建一个 XmlSerializer 对象
XmlSerializer serializer = new XmlSerializer(typeof(Person));
// 将 Person 对象序列化为 XML 字符串
StringWriter sw = new StringWriter();
serializer.Serialize(sw, person);
string xmlString = sw.ToString();
Console.WriteLine(xmlString);
// 将 XML 字符串反序列化为 Person 对象
StringReader sr = new StringReader(xmlString);
Person deserializedPerson = (Person)serializer.Deserialize(sr);
Console.WriteLine(deserializedPerson.Name);
Console.WriteLine(deserializedPerson.Age);
}
}
使用 DataContractSerializer 实现序列化和反序列化的代码示例:
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; [DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } } class Program { static void Main(string[] args) { // 创建一个 Person 对象 Person person = new Person { Name = "Tom", Age = 20 }; // 创建一个 DataContractJsonSerializer 对象 DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person)); // 将 Person 对象序列化为 JSON 字符串 MemoryStream ms = new MemoryStream(); serializer.WriteObject(ms, person); string jsonString = System.Text.Encoding.UTF8.GetString(ms.ToArray()); Console.WriteLine(jsonString); // 将 JSON 字符串反序列化为 Person 对象 ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonString)); Person deserializedPerson = (Person)serializer.ReadObject(ms); Console.WriteLine(deserializedPerson.Name); Console.WriteLine(deserializedPerson.Age); } }
注意:在使用 DataContractSerializer 进行序列化和反序列化时,需要在要序列化/反序列化的类上添加 [DataContract] 和 [DataMember] 属性。
原文作者:后端Q;如有侵权,请联系管理员删除。