序列化到底是神马?

 简明扼要版:

Serialization is the process of converting unordered data (such as an object) into a series of tokens 。(stackoverflow

序列化一词的本意就是将数据排列成一系列series)的原子性小词(token),以便存储和传输。

 

复杂饶舌版:

serialization is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer, or transmitted across a network connection link) and resurrected later in the same or another computer environment。(wiki

序列化就是指将数据结构或对象转化为一种可以被存储(比如说,在文本、内存或通过网络链接传输)的格式,并且可以在相同或另一台电脑的环境中复原的过程。

 

补充:在计算机术语中,marshalling(配置整齐)/unmarshalling,deflating(紧缩)/inflating也是指相同的意思。

 

 

C#中的实践:

BinaryFormatter是用于将对象序列化到输出流。一般就是将对象存储在磁盘上。

这个流中存储了该对象的精确的二进制副本。

Person p = new Person();
p.Id = "123";
p.Name = "Benjamin";

FileStream stream = new FileStream("D:\\person.bin", FileMode.Create, FileAccess.Write, FileShare.None);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, p);
stream.Close();

 

SoapFormatter则是是序列化为Soap格式。

Person p = new Person();
p.Id = "123";
p.Name = "Benjamin";     
FileStream stream = new FileStream("C:\\person.txt", FileMode.Create, FileAccess.Write,FileShare.None);
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(stream, p);
stream.Close();

打开person.txt,结果是一个符合SOAP协议的文件:

 

 

 

XmlSerializer则是序列化为Xml格式:

Person p = new Person();
p.Id = "123";
p.Name = "Benjiamin";
FileStream stream = new FileStream("C:\\person.xml", FileMode.Create, FileAccess.Write,
FileShare.None);
XmlSerializer xmlserializer = new XmlSerializer(typeof(Person));
xmlserializer.Serialize(stream, p);
stream.Close();

打开person.txt,结果是一个符合XML文档格式的文件:

 

 

而现在经常是使用 json作为文件传输格式,因此最常用的是以下方法:

NewtonSoft.Json dll的序列化和反序列化

 string s1 = JsonConvert.SerializeObject(p);  
Person p1 = JsonConvert.DeserializeObject<Person>(s1);

以及.net自带的JavaScriptSerializer:

 string s2 = new JavaScriptSerializer().Serialize(p);
 Person p2= new JavaScriptSerializer().Deserialize<Person>(s2);

 

在javascript中常用Json2.js中的方法:

  var person = new Object();
   person.Id = "112233";
   person.Name = "Benjamin";
 var personStr = JSON.stringify(person); //序列化
 var person = JSON.parse(personStr);//反序列化

以及一个jQuery中不常用的:

$("form").serialize() //将一个表单内有name属性且选中的元素序列化为形如single=Single2&multiple=Multiple&check=check2 的字符串

 

posted @ 2013-11-12 11:24  瓜王  阅读(357)  评论(0编辑  收藏  举报