• 序列化到底是神马?


     简明扼要版:

    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 的字符串
  • 相关阅读:
    (转)simple-framework(MaliSDK框架分析)
    (转)libhybris及EGL Platform-在Glibc生态中重用Android的驱动
    (原)在firefly_rk3288开发板上解决openGL在设置32位色深以后出现花屏的问题
    参考论坛:Mali kernel driver TX011-SW-99002-r5p1-00rel0 for firefly
    (转)android媒体--stagefright概述【一】
    (转)android系统架构及源码目录结构
    (原)linux下利用cmake来编译jthread开源库
    (原)U盘可见容量不能被识别的处理方法
    学会阅读Java字节码
    JVM
  • 原文地址:https://www.cnblogs.com/Benjamin/p/3414782.html
Copyright © 2020-2023  润新知