首页 > 代码库 > C#序列化
C#序列化
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格式化器在序列化开始之前调用此方法"); }}
C#序列化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。