您的位置:首页 > 其它

序列化到底是神马?

2013-11-12 11:24 204 查看
简明扼要版:

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 的字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: