引言在软件开发过程中,数据持久化是一个不可或缺的环节。它涉及到将内存中的数据转换为可以存储在硬盘或其他存储介质上的格式,以及从这些存储介质中恢复数据的过程。C作为一门强大的编程语言,提供了多种序列化与...
在软件开发过程中,数据持久化是一个不可或缺的环节。它涉及到将内存中的数据转换为可以存储在硬盘或其他存储介质上的格式,以及从这些存储介质中恢复数据的过程。C#作为一门强大的编程语言,提供了多种序列化与反序列化的机制,使得数据持久化变得简单而高效。本文将深入探讨C#中的序列化与反序列化技术,帮助读者轻松掌握数据持久化的技巧。
序列化是将对象状态转换为可以存储或传输的格式的过程。在C#中,序列化可以将对象的状态保存到文件、数据库或网络流中等。
C#提供了多种序列化机制,包括:
BinaryFormatter是C#中最常用的序列化方法之一,它可以将对象序列化为二进制格式。
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Person
{ public string Name; public int Age;
}
class Program
{ static void Main() { Person person = new Person { Name = "张三", Age = 30 }; BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream("person.dat", FileMode.Create)) { formatter.Serialize(stream, person); } }
}using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Person
{ public string Name; public int Age;
}
class Program
{ static void Main() { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream("person.dat", FileMode.Open)) { Person person = (Person)formatter.Deserialize(stream); Console.WriteLine("Name: " + person.Name + ", Age: " + person.Age); } }
}XMLSerializer可以将对象序列化为XML格式。
using System;
using System.IO;
using System.Xml.Serialization;
[Serializable]
public class Person
{ public string Name; public int Age;
}
class Program
{ static void Main() { Person person = new Person { Name = "李四", Age = 25 }; XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (StreamWriter writer = new StreamWriter("person.xml")) { serializer.Serialize(writer, person); } }
}using System;
using System.IO;
using System.Xml.Serialization;
[Serializable]
public class Person
{ public string Name; public int Age;
}
class Program
{ static void Main() { XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (StreamReader reader = new StreamReader("person.xml")) { Person person = (Person)serializer.Deserialize(reader); Console.WriteLine("Name: " + person.Name + ", Age: " + person.Age); } }
}DataContractSerializer是.NET Framework 3.0及以上版本提供的一种序列化方法,它使用XML数据交换标准。
using System;
using System.IO;
using System.Runtime.Serialization.DataContractSerializer;
[DataContract]
public class Person
{ [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; }
}
class Program
{ static void Main() { Person person = new Person { Name = "王五", Age = 20 }; DataContractSerializer serializer = new DataContractSerializer(typeof(Person)); using (StreamWriter writer = new StreamWriter("person.datasc")) { serializer.WriteObject(writer, person); } }
}using System;
using System.IO;
using System.Runtime.Serialization.DataContractSerializer;
[DataContract]
public class Person
{ [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; }
}
class Program
{ static void Main() { DataContractSerializer serializer = new DataContractSerializer(typeof(Person)); using (StreamReader reader = new StreamReader("person.datasc")) { Person person = (Person)serializer.ReadObject(reader); Console.WriteLine("Name: " + person.Name + ", Age: " + person.Age); } }
}在序列化对象时,只有公共成员会被序列化。因此,确保对象的公共成员包含所有需要持久化的数据。
对于复杂类型,如集合、数组等,需要确保它们是可序列化的。
序列化过程中,循环引用会导致异常。在序列化前,需要处理循环引用问题。
在序列化过程中,需要考虑安全性问题,如防止恶意代码执行。
本文深入探讨了C#中的序列化与反序列化技术,介绍了BinaryFormatter、XMLSerializer和DataContractSerializer等常用序列化方法。通过本文的学习,读者可以轻松掌握数据持久化的技巧,为软件开发中的数据存储和传输提供有力支持。