标签:
1.序列化一般有2种(XML和2进制),简单对象序列化
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Windows.Forms; using System.Xml.Serialization; namespace Test { //对于XmlSerializer序列化,默认即使不使用特性Serializable,也是可以对对象进行序列化的,则BinaryFormatter不然一定要使用Serializable标记。 public partial class Form1 : Form { //XmlSerializer是XML序列化 XmlSerializer xs = new XmlSerializer(typeof(Student)); //二进制序列化 BinaryFormatter b = new BinaryFormatter(); Student student = new Student() { Name = "小明", Age = 15 }; public Form1() { InitializeComponent(); //xml序列化 using (Stream stream = new FileStream("d:\\Student.xml", FileMode.Create, FileAccess.Write, FileShare.Read)) { xs.Serialize(stream, student); } //xml反序列化 using (FileStream fs = new FileStream("d:\\Student.xml", FileMode.Open, FileAccess.Read)) { Student student = (Student)xs.Deserialize(fs); } //二进制序序列化 using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Create)) { BinaryFormatter b = new BinaryFormatter(); //序列化类要加[Serializable]特性 b.Serialize(fileStream, student); } //二进制序反序列化 using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Open, FileAccess.Read)) { BinaryFormatter bf = new BinaryFormatter(); student = (Student)bf.Deserialize(fileStream); } } } } [Serializable] public class Student { public string Name { get; set; } public int Age { get; set; } }
2.复杂对象序列化
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Serialization; namespace Test { public partial class Form1 : Form { //XmlSerializer是XML序列化 XmlSerializer xs = new XmlSerializer(typeof(TeacherStudent)); //二进制序列化 BinaryFormatter b = new BinaryFormatter(); TeacherStudent teacherStudent = new TeacherStudent(); Teacher teacher = new Teacher() { Name = "王老师", Age = 45 }; Student student = new Student() { Name = "小明", Age = 15 }; public Form1() { InitializeComponent(); //xml序列化 using (Stream stream = new FileStream("d:\\Student.xml", FileMode.Create, FileAccess.Write, FileShare.Read)) { teacherStudent.Teacher = teacher; teacherStudent.Student = student; xs.Serialize(stream, teacherStudent); } //xml反序列化 using (FileStream fs = new FileStream("d:\\Student.xml", FileMode.Open, FileAccess.Read)) { teacherStudent = null; teacherStudent = (TeacherStudent)xs.Deserialize(fs); } //二进制序序列化 using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Create)) { BinaryFormatter b = new BinaryFormatter(); b.Serialize(fileStream, teacher); b.Serialize(fileStream, student); } //二进制序反序列化 using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Open, FileAccess.Read)) { teacher = null; student = null; BinaryFormatter bf = new BinaryFormatter(); teacher = (Teacher)bf.Deserialize(fileStream); student = (Student)bf.Deserialize(fileStream); } } } } [Serializable] public class Student { public string Name { get; set; } public int Age { get; set; } } [Serializable] public class Teacher { public string Name { get; set; } public int Age { get; set; } } [Serializable] public class TeacherStudent { public Teacher Teacher { get; set; } public Student Student { get; set; } }
3. 控制序列化/反序列化前后的数据
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { //XmlSerializer是XML序列化 BinaryFormatter b = new BinaryFormatter(); Student student = new Student() { Name = "小明", Age = 15 }; public Form1() { InitializeComponent(); //二进制序序列化 using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Create)) { BinaryFormatter b = new BinaryFormatter(); b.Serialize(fileStream, student); } //二进制序反序列化 using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Open, FileAccess.Read)) { BinaryFormatter bf = new BinaryFormatter(); student = (Student)bf.Deserialize(fileStream); } } } } [Serializable] public class Student { public string Name { get; set; } public int Age { get; set; } [OnSerializing()] internal void OnSerializingMethod(StreamingContext context) { //格式化器在序列化开始之前调用此方法。 Console.WriteLine("OnSerializing格式化器在序列化开始之前调用此方法"); } [OnSerialized()] internal void OnSerializedMethod(StreamingContext context) { //格式化器在序列化后调用此方法。 Console.WriteLine("OnSerialized格式化器在序列化后调用此方法"); } [OnDeserializing()] internal void OnDeserializingMethod(StreamingContext context) { //格式化器在反序列化开始之前调用此方法。 Console.WriteLine("OnDeserializing格式化器在反序列化开始之前调用此方法"); } [OnDeserialized()] internal void OnDeserializedMethod(StreamingContext context) { //格式化器在序列化开始之前调用此方法。 Console.WriteLine("OnDeserialized格式化器在序列化开始之前调用此方法"); } }
标签:
原文地址:http://www.cnblogs.com/lgxlsm/p/5860812.html