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.反序列化 

 

posted on 2015-11-17 15:09  许清池  阅读(161)  评论(0编辑  收藏  举报

导航