zoukankan      html  css  js  c++  java
  • [传智播客学习日记]序列化、XML序列化与深拷贝操作

    要把一个复杂对象弄成一个文件发给别人的话,自己定义存储格式要费很大的周折,不过微软早就帮咱们把算法写好了,只要套用一个函数就OK了!越来越觉得C#便捷了!

    序列化:

     1 //1.序列化:
    2 //给所有要序列化的类、父类、成员的类添加[Serializable]特性
    3 //创建写的文件流
    4 FileStream fs = File.Create("person.bin");
    5 using (fs)
    6 {
    7 //创建一个序列化器
    8 BinaryFormatter bf = new BinaryFormatter();
    9 //执行序列化
    10 bf.Serialize(fs, p);
    11 }
    12
    13 //2.反序列化:
    14 //引用被序列化的成员的类所在的程序集
    15 //创建读文件流
    16 FileStream fs1 = File.OpenRead("person.bin");
    17 Person p1;
    18 using (fs1)
    19 {
    20 //创建序列化器
    21 BinaryFormatter bf1 = new BinaryFormatter();
    22 //执行反序列化
    23 Object obj = bf1.Deserialize(fs1);
    24 p1 = (Person)obj;
    25 }


    XML序列化与上面的类似:

     1 //XML序列化要添加的特性是[XmlIgnoreAttribute]。不能序列化私有字段。
    2
    3 //1.序列化
    4 XmlSerializer xml = new XmlSerializer(typeof(Person));
    5 using (FileStream fs = File.OpenWritePersonxml"))
    6 {
    7 xml.Serialize(fs, list);
    8 }
    9
    10 //2.反序列化
    11 XmlSerializer xmlSerializer = new XmlSerializer(typeof(类Person型));
    12 using (FileStream fs = File.OpenRead(Person.xml"))
    13 {
    14 Person p = (Person)xmlSerializer.Deserialize(fs);
    15 }


    序列化的典型应用就是深拷贝:

     1 public Person Copy()
    2 {
    3 //定义序列化器
    4 BinaryFormatter bf = new BinaryFormatter();
    5 //定义内存流
    6 MemoryStream ms = new MemoryStream();
    7 using (ms)
    8 {
    9 //将对象序列化到流中。
    10 bf.Serialize(ms, this);
    11 //让流的指针再回到初始位置
    12 ms.Position = 0;
    13 //反序列化到新对象里
    14 Person p = (Person)bf.Deserialize(ms);
    15 return p;
    16 }
    17 }



  • 相关阅读:
    第一台虚拟机联网
    情话
    03-Linux的shell命令 .doc
    Linux系统目录结构介绍
    href 里面 链接前面加/与不加的区别?(绝对路径与相对路径)
    本地仓库关联远程仓库,从远程仓库克隆代码
    HTml <meta>标签的使用(重要)
    JS中 submit提交与Form表单里的onsubmit的调用问题?
    JS中 confirm()方法的使用?
    表单数据校检方法 onsubmit()的使用?
  • 原文地址:https://www.cnblogs.com/Elijah/p/2226184.html
Copyright © 2011-2022 走看看