序列化到底是神马?
简明扼要版:
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 的字符串