.net 中序列化和反序列化的使用

序列化的目的:将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

序列化

序列化分为JSON 序列化,XML序列化,二进制序列化

准备工作,新建一个Person类

1    [Serializable]
2     public class Person
3     {
4         public string Name { get; set; }
5         public int Age { get; set; }
6     }

 

该类用[Serializable]标签表示为可序列化

准备工作,创建该类的示例

1   Person p = new Person() { Name = "张三", Age = 25 };

一,JSON序列化和反序列化

 1,JSON序列化

1    /*json序列化*/
2    var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
3    var str = javaScriptSerializer.Serialize(p);

结果:

2,JSON反序列化

1             /*json 反序列化*/
2             var jsonObject = javaScriptSerializer.Deserialize(str, p.GetType());
3             Console.WriteLine((jsonObject as Person).Name);
4             Console.Read();

3,JSON序列化还有一种方式

1  /*json序列化*/
2             DataContractJsonSerializer dcjs = new DataContractJsonSerializer(p.GetType());
3             MemoryStream ms = new MemoryStream();
4             dcjs.WriteObject(ms, p);
5             var s = Encoding.UTF8.GetString(ms.ToArray());
6             ms.Close();
7             /*反序列化*/
8             MemoryStream ms1 = new MemoryStream(Encoding.UTF8.GetBytes(s));
9             var objPerson = dcjs.ReadObject(ms1) as Person;

  使用这个类的时候,会在序列化的JSON字符串带有 K__BackingFideId 前缀

  如下图;

 当Person 类中没有[Serializable] 标签的时候一切都恢复正常了

二,XML序列化和反序列化

 1   /*xml序列化*/
 2             FileStream fsXml = new FileStream("1.xml", FileMode.Create, FileAccess.ReadWrite);
 3             System.Xml.Serialization.XmlSerializer xsl = new XmlSerializer(p.GetType());
 4             xsl.Serialize(fsXml, p);
 5             fsXml.Dispose();
 6 
 7             /*xml反序列化*/
 8             FileStream fsDeXml = new FileStream("1.xml", FileMode.Open, FileAccess.ReadWrite);
 9             var Xmlobj = xsl.Deserialize(fsDeXml);
10             fsDeXml.Dispose();

三,二进制序列化和反序列化

 1             /*二进制序列化*/
 2             FileStream fsBin = new FileStream("2.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
 3             BinaryFormatter bf = new BinaryFormatter();
 4             bf.Serialize(fsBin, p);
 5             fsBin.Dispose();
 6 
 7             /*二进制反序列化*/
 8             FileStream fsBinDes = new FileStream("2.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
 9             BinaryFormatter bfDes = new BinaryFormatter();
10             var binObject = bfDes.Deserialize(fsBinDes);

 

posted @ 2014-04-07 17:34  苏镡  阅读(249)  评论(0编辑  收藏  举报