C#_序列化
//序列化就是格式化: 用一种简单的有规律的格式来存储对象 反序列化:还原成对象
//1.JavaScriptSerializer :
1 using System.Web.Script.Serialization; 2 3 //集合类型的对象 4 List<Person> list = new List<Person>() 5 { 6 new Person(){Name="Joe",Age=21,Email="11@qq.com"}, 7 new Person(){Name="Leo",Age=19,Email="22@qq.com"}, 8 new Person(){Name="Kat",Age=20,Email="33@qq.com"} 9 }; 10 //对象序列化 : 把某个对象 使用另外一种格式 来存储 11 #region 对象序列化 12 //使用 JavaScript序列化 13 JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 14 string ss= jsSerializer.Serialize(list); 15 Console.WriteLine(ss); 16 #endregion
//2.XMlSerializer
using System.Xml.Serialization;
//XmlSerializer //XmlSerializer xSerializer = new XmlSerializer(list.GetType()); XmlSerializer xSerializer =new XmlSerializer(typeof(List<Person>)); using(FileStream fs=File.OpenWrite("list.xml")) { xSerializer.Serialize(fs, list); }
//3.二进制序列化 BinaryFormatter
1 using System.Runtime.Serialization.Formatters.Binary; 2 3 //BinaryFormatter 二进制序列化 4 BinaryFormatter binaryFormatter = new BinaryFormatter(); 5 using (FileStream fs = File.OpenWrite("binary.binary")) //存储文件的后缀名无关 里面存放的就是一些字节 6 { 7 binaryFormatter.Serialize(fs, list); 8 }
//在公有类之前添加 [Serializable]
1 [Serializable] 2 public class Person 3 { 4 public string Name 5 { 6 get; 7 set; 8 } 9 10 11 public int Age 12 { 13 get; 14 set; 15 } 16 17 public string Email 18 { 19 get; 20 set; 21 } 22 23 public void SayHi() 24 { 25 Console.WriteLine("Hi,{0}",Name); 26 } 27 28 public void SayHello() 29 { 30 Console.WriteLine("HElloo.."); 31 } 32 }
//其结果就是将对象序列化以后以二进制文件存储在磁盘中:
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//二进制序列化
1.创建二进制序列化器
2.开始执行二进制序列化 参数(流,对象)序列化到文件上 -->文件流
//被序列化的对象必须标记为可序列化的
//二进制序列化会把属性对应的字段序列化到文件中 所以最好自己写字段 然后封装 不用自动属性
//当序列化一个对象时,对象自身以及所有父类都必须标记 [Serializable]
//被序列化的对象的所有属性、字段的类型 也必须标记为 [Serializable]
//接口和方法有关,所以接口不需要被标记
//若在字段前 添加:[NonSerialized] 则该字段不会被序列化
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
-->反序列化
反序列化的时候,需要创建原来被序列化之前的对象,需要引用序列化之前的对象
将状态信息序列化过来就行(数值->属性)
1.创建对象
2.从序列化后的文件中读取数据 然后赋值
步骤:
//1.创建序列化器
//2.反序列化