码迷,mamicode.com
首页 > 其他好文 > 详细

序列化与反序列化

时间:2015-04-26 01:09:38      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:

定义
序列化:实际是格式化,把一种对象转化成另一种格式保存,转化成不同的格式就叫做不同的序列化
反序列化:转回去
MSDN定义:将对象的状态保存到存储媒体,以便可以在以后的阶段重新创建精确副本
 
序列化有很多种
对象格式化:把某个对象,使用另外一种格式来储存,更方便数据交换
二进制序列化
xml序列化
Javascript序列化
作用:传输数据.
只序列化那些对象的属性,字段.
 
 二进制序列化:
如果要序列化某类,要标记这个类及其父类,成员类型为可以被序列化的。接口不需要标记
用Serializable标记
BinaryFormatter类,序列化的执行者,用来序列化.
[NonSerialized]可以标记某字段为不可序列化,这个标记只对于二进制序列化
 
反序列化:
反序列化时,需要创建原来被序列化的类型的对象,这个对象已经有了成员方法,缺少的是数据成员具体的数据,所以二进制序列化不需要序列化  对象的方法.反序列化时,会创建对应的对象,并把数据复制给对象
//注意访问修饰符
 
 
例子:
1 using (FileStream fsWrite=new FileStream(string path,FileMode,FileAccess.Read)
2 BinaryFormatter bf=new BinaryFormatter();
3 void bf.Serialize(Stream ,Object);//自动执行了fsWrite.Write(); 

 

  1. [Serializable]//标记可序列化
        public class Person
        {
            private string _name;
            public string Name {
                get { return _name; }
                set { _name = value; }
            }
        }
        class Program
        {
            public static void Main(string[] args)
            {
                Person p=new Person();
                p.Name="666";
                using(FileStream fsWrite=new FileStream(@"D:\123.txt",FileMode.OpenOrCreate,FileAccess.Write))
                {
                    BinaryFormatter bf=new BinaryFormatter();//创建序列化器
                    bf.Serialize(fsWrite,p);//序列化
                }
                using ( FileStream fsRead=new FileStream(@"D:\123.txt",FileMode.Open,FileAccess.Read) ){
                    Person pp;
                    BinaryFormatter bb=new BinaryFormatter();
                    pp=(Person)bb.Deserialize(fsRead);//这里返回objec,反序列化
                    Console.WriteLine(pp.Name);
                    Console.ReadKey();
                }
            }
        }

     

 
Javascript序列化:
需要引用:System.Web.Extensions.dll
 1 List<Person> list = new List<Person>();
 2 list.Add(new Person() { Name = "AAAA", Age = 19, Email = "ysh@yahoo.com" });
 3 list.Add(new Person() { Name = "BBBB", Age = 29, Email = "swb@yahoo.com" });
 4 list.Add(new Person() { Name = "BBBB", Age = 16, Email = "ylp@yahoo.com" });
 5  
 6 //使用JavaScript 序列化。
 7 JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
 8 string str = jsSerializer.Serialize(list);
 9 //jsSerializer.Deserialize();//反序列化
10 File.WriteAllText("list.txt", str);
11 Console.WriteLine(str);
12 Console.ReadKey();

 

效果图:
技术分享
 
xml序列化
 
  1.  1 List<Person> list = new List<Person>();
     2 list.Add(new Person() { Name = "AAAA", Age = 19, Email = "ysh@yahoo.com" });
     3 list.Add(new Person() { Name = "BBBB", Age = 29, Email = "swb@yahoo.com" });
     4 list.Add(new Person() { Name = "CCCC", Age = 16, Email = "ylp@yahoo.com" });
     5 //xml序列化
     6 //XmlSerializer xmlSerializer = new XmlSerializer(list.GetType());
     7 XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Person>));
     8 using (FileStream fsWrite = File.OpenWrite("list.xml"))
     9 {
    10     xmlSerializer.Serialize(fsWrite, list);
    11     //xmlSerializer.Deserialize();//反序列化
    12 }
    13 Console.WriteLine("ok");
    14 Console.ReadKey();

     

效果图:
技术分享
 
 



序列化与反序列化

标签:

原文地址:http://www.cnblogs.com/Recoding/p/4457129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!