zoukankan      html  css  js  c++  java
  • C#中的序列化和反序列化详解

    什么是序列化与反序列化???

    序列化和反序列化,我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用。

    序列化和反序列化的主要作用有:

      1、在进程下次启动时读取上次保存的对象的信息

      2、在不同的AppDomain或进程之间传递数据

      3、在分布式应用系统中传递数据

      .............

    常见的序列化的方法:

      1、BinaryFormatter

      2、SoapFormatter

      3、XML序列化

    用法:

      BinaryFormatter的用法大致如下:  

    复制代码
     //BinaryFormatter将对象序列化到文件中
     List<string> inputList = new List<string>() { "潮流时尚公子","http://gz168168.taobao.com","欢迎专注技术的程序袁来看看笔者的网店哦"};
     using (FileStream fsWriter = new FileStream(@"gz168168.tmp",FileMode.Create,FileAccess.Write))
     {
           BinaryFormatter bf = new BinaryFormatter();
           //序列化
           bf.Serialize(fsWriter, inputList);
     }
    
     //BinaryFormatter将文件中的数据反序列化出来
     List<string> outputList = new List<string>();
     using (FileStream fsReader = new FileStream(@"gz168168.tmp",FileMode.Open,FileAccess.Read))
     {
           BinaryFormatter bf = new BinaryFormatter();
           //反序列化
           outputList = (List<string>)bf.Deserialize(fsReader);
     }
    复制代码

      XML序列化的用法大致如下: 

    复制代码
    //xml序列化到test.xml文件中
    List<string> inputList = new List<string>() { "潮流时尚公子","http://gz168168.taobao.com"};
    using (FileStream fsWriter = new FileStream(@"test.xml",FileMode.Create,FileAccess.Write))
    {
          XmlSerializer xs = new XmlSerializer(typeof(List<string>));
          xs.Serialize(fsWriter, inputList);
    }
    
    //从test.xml文件中反序列化出来
    List<string> outputList = new List<string>();
    using (FileStream fsReader = new FileStream(@"test.xml",FileMode.Open,FileAccess.Read))
    {
         XmlSerializer xs = new XmlSerializer(typeof(List<string>));
         outputList = xs.Deserialize(fsReader) as List<string>;
    }
    复制代码

    总结:

    两个的用法大致如下:
    序列化:
      1.得到一个存储对象的类型
      2.创建一个写入文件流
      3.定义要序列化的类型
      4.调用序列化方法
    反序列化:
      1.定义一个装载对象的类型
      2.创建一个读出文件流
      3.定义要反序列化的类型
      4.调用反序列化方法
    BinaryFormatter类进行序列化和反序列化,以缩略型二进制格式写到一个文件中去,速度比较快,而且写入后的文件已二进制保存有一定的保密效果。标记为NonSerialized的其他所有成员都能序列化。
    采用xml序列化的方式只能保存public的字段和可读写的属性,对于private等类型的字段不能进行序列化。
    二进制序列化的优点: 
      1. 所有的类成员(包括只读的)都可以被序列化;
      2. 性能非常好。
    XML序列化的优点:
      1. 互操作性好;
      2. 不需要严格的二进制依赖;
      3. 可读性强
    SoapFormatter微软淘汰了,,不能序列化泛型,这里就不多讲了。
  • 相关阅读:
    053(九)
    方法的重载
    方法的重写(override / overwrite)
    属性与局部变量的对比
    面向对象基础知识合集:对象的产生、对象的生命周期、内存解析
    使用二维数组打印一个 10 行杨辉三角
    数组中的常见异常: 1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion 2. 空指针异常:NullPointerException
    快速排序
    * 数组的冒泡排序的实现
    * 二维数组的使用
  • 原文地址:https://www.cnblogs.com/zhaolizhe/p/6936567.html
Copyright © 2011-2022 走看看