zoukankan      html  css  js  c++  java
  • C#_序列化

    //序列化就是格式化: 用一种简单的有规律的格式来存储对象   反序列化:还原成对象

    //1.JavaScriptSerializer :

     1 using System.Web.Script.Serialization;
     2 
     3 //集合类型的对象
     4 List<Person> list = new List<Person>()
     5 {
     6 new Person(){Name="Joe",Age=21,Email="11@qq.com"},
     7 new Person(){Name="Leo",Age=19,Email="22@qq.com"},
     8 new Person(){Name="Kat",Age=20,Email="33@qq.com"}
     9 };
    10 //对象序列化 : 把某个对象 使用另外一种格式 来存储 
    11 #region 对象序列化
    12 //使用 JavaScript序列化 
    13 JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
    14 string ss= jsSerializer.Serialize(list);
    15 Console.WriteLine(ss);
    16 #endregion

    //2.XMlSerializer

     using System.Xml.Serialization;

        //XmlSerializer
                 //XmlSerializer xSerializer = new XmlSerializer(list.GetType());
                  XmlSerializer xSerializer =new XmlSerializer(typeof(List<Person>));
                using(FileStream fs=File.OpenWrite("list.xml"))
                {
                    xSerializer.Serialize(fs, list);
                }

    //3.二进制序列化   BinaryFormatter

    1 using System.Runtime.Serialization.Formatters.Binary;
    2 
    3  //BinaryFormatter 二进制序列化 
    4             BinaryFormatter binaryFormatter = new BinaryFormatter();
    5             using (FileStream fs = File.OpenWrite("binary.binary"))        //存储文件的后缀名无关     里面存放的就是一些字节
    6             {
    7                 binaryFormatter.Serialize(fs, list);
    8             }

    //在公有类之前添加  [Serializable]

     1     [Serializable]
     2     public class Person
     3     {
     4         public string Name
     5         {
     6             get;
     7             set;
     8         }
     9 
    10 
    11         public int Age
    12         {
    13             get;
    14             set;
    15         }
    16 
    17         public string Email 
    18         { 
    19             get;
    20             set;
    21         }
    22 
    23         public void SayHi()
    24         {
    25             Console.WriteLine("Hi,{0}",Name);
    26         }
    27 
    28         public void SayHello()
    29         {
    30             Console.WriteLine("HElloo..");
    31         }
    32     }

    //其结果就是将对象序列化以后以二进制文件存储在磁盘中:

    //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    //二进制序列化 

    1.创建二进制序列化器

    2.开始执行二进制序列化   参数(流,对象)序列化到文件上 -->文件流

    //被序列化的对象必须标记为可序列化的

    //二进制序列化会把属性对应的字段序列化到文件中  所以最好自己写字段  然后封装  不用自动属性  

    //当序列化一个对象时,对象自身以及所有父类都必须标记   [Serializable]

    //被序列化的对象的所有属性、字段的类型  也必须标记为   [Serializable]

    //接口和方法有关,所以接口不需要被标记

    //若在字段前   添加:[NonSerialized]   则该字段不会被序列化 

    //-----------------------------------------------------------------------------------------------------------------------------------------------------------------

    -->反序列化   

    反序列化的时候,需要创建原来被序列化之前的对象,需要引用序列化之前的对象

    将状态信息序列化过来就行(数值->属性)

    1.创建对象

    2.从序列化后的文件中读取数据  然后赋值

    步骤:

      //1.创建序列化器 

      //2.反序列化 

  • 相关阅读:
    CentOS 7.4 安装python3及虚拟环境
    【抓包工具之Fiddler】增加IP列;session高亮
    【抓包工具之Fiddler】导出jmeter脚本
    Python2.7 Centos安装
    Centos 轻松升级 GCC 不改变系统环境
    GraphLab 安装 出错 "Cannot uninstall 'boto'" "Cannot uninstall 'certifi'"
    Centos6 使用 gbdt lightgbm "libc.so.6: version `GLIBC_2.14' not found" "Segment Fault"
    Linux 安装 gbdt xgboost lightgbm
    Sudo Permission Denied
    Linux Load Average高但磁盘IO和CPU占用率不高的可能原因
  • 原文地址:https://www.cnblogs.com/siyi/p/4971794.html
Copyright © 2011-2022 走看看