using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 序列化反序列化 { class Program { static void Main(string[] args) { //需要将对象的状态保存起来 持久化 //序列化:将对象的状态持久化到某种设备上(磁盘) //要将类标记为Serializable 这个类的对象才能被序列化 //以二进制的方式进行序列化,而不是文本文档 //反序列化:将之前序列化的文件还原为对象 #region[序列化] Person p1 = new Person() { Age = 19, Name = "Rose" }; System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); using (FileStream fs = new FileStream("se.bin", FileMode.Create)) { bf.Serialize(fs, p1); } #endregion #region【反序列化】 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf2 = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); using (FileStream fs = new FileStream("se.bin", FileMode.Open)) { object obj = bf2.Deserialize(fs); Person p3 = obj as Person; Console.WriteLine("Age:" + p3.Age.ToString() + "Name:" + p3.Name); } #endregion #region [将一个对象保存到文件文本中,用文件的方式让对象持久化,但是麻烦] Person p = new Person(); if (File.Exists(@"1.txt")) { string[] strlines = File.ReadAllLines(@"1.txt"); p.Age = int.Parse(strlines[0]); p.Name = strlines[1]; } else { p.Age = 19; p.Name = "Jack"; File.WriteAllLines(@"1.txt", new string[] { p.Age.ToString(), p.Name }); } #endregion Console.Read(); } } [Serializable]//表示这个对象可以被序列化,里面的成员如果有其它类,那么这个类也应该需要标记Serializable public class Person { public int Age { get; set; } public string Name { get; set; } } }