虚拟化和反序列化

1、为什么要虚拟化:将我们自己的对象状态(数据)持久化、传输等。

2、.net framwork 提供了两种序列化api

A、二进制序列化:

        /// <summary>
        /// 二进制序列化方法
        /// </summary>
        public static void Serializer()
        {
            MyObject obj = new MyObject();
            obj.n1 = 1;
            obj.n2 = 24;
            obj.str = "Some String";
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(@"F:\测试文件夹\ceshi.txt", FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(stream, obj);
            stream.Flush();
            stream.Close();

        }

        /// <summary>
        /// 二进制反序列化
        /// </summary>
        public static  void DesSerializer()
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(@"F:\测试文件夹\ceshi.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
            MyObject obj = (MyObject)formatter.Deserialize(stream);
            stream.Close();

            // Here‘s the proof.
            Console.WriteLine("n1: {0}", obj.n1);
            Console.WriteLine("n2: {0}", obj.n2);
            Console.WriteLine("str: {0}", obj.str);
            Console.ReadKey();
        }

B、XML序列化

   public  class BaseInfo
    {
        List<Person> perList = new List<Person>();

        [XmlElement(ElementName = "Person")]
        public List<Person> PerList
        {

            get { return perList; }
            set { perList = value; }
        }

    }

  public   class Person
    {

        string name;
        int age;
        List<Books> bookList = new List<Books>();

        /// <summary>
        /// 必须有默认的构造函数
        /// </summary>
        public Person()
        { }

        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        [XmlElement(ElementName = "Books")]
        public List<Books> BookList
        {
            get { return bookList; }
            set { bookList = value; }
        }
    }

    public class Books
    {
        List<Book> bookList = new List<Book>();

        [XmlElement(ElementName = "Book")]
        public List<Book> BookList
        {
            get { return bookList; }
            set { bookList = value; }
        }
    }
    public class Book
    {
        string isbn;
        string title;

        public Book() { }

        public Book(string isbn, string title)
        {
            this.isbn = isbn;
            this.title = title;
        }

        public string ISBN
        {
            get { return isbn; }
            set { isbn = value; }
        }

        public string Title
        {
            get { return title; }
            set { title = value; }
        }
    }
    /// <summary>
        /// xml序列化方法
        /// </summary>
        public static void xmlSerialize()
        {
            Book b1 = new Book("111", "书1");
            Book b2 = new Book("222", "书2");
            Book b3 = new Book("333", "书3");
            Books bs1 = new Books();
            Books bs2 = new Books();
            bs1.BookList.Add(b1);
            bs1.BookList.Add(b2);
            bs2.BookList.Add(b3);
            Person p1 = new Person("张三", 11);
            Person p2 = new Person("李四", 22);
            p1.BookList.Add(bs1);
            p2.BookList.Add(bs2);
            BaseInfo baseInfo = new BaseInfo();
            baseInfo.PerList.Add(p1);
            baseInfo.PerList.Add(p2);

            StringWriter sw = new StringWriter();
            //FileStream fs = new FileStream(@"F:\测试文件夹\baseInfo.xml",FileMode.CreateNew);
            //创建XML命名空间
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            ns.Add("", "");
            XmlSerializer serializer = new XmlSerializer(typeof(BaseInfo));
            serializer.Serialize(sw, baseInfo, ns);
            File.WriteAllText(@"F:\测试文件夹\baseInfo.xml", sw.ToString());
            Console.Write(sw.ToString());
            sw.Close();
            Console.ReadKey();
        }

        /// <summary>
        /// xml反序列化方法
        /// </summary>
        public static void xmlDeserialize(string path)
        {
            //xml来源可能是外部文件,也可能是从其他系统获得
            FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
            XmlSerializer xmlSearializer = new XmlSerializer(typeof(BaseInfo));
            BaseInfo info = (BaseInfo)xmlSearializer.Deserialize(file);
            file.Close();
            foreach (Person per in info.PerList)
            {
                Console.WriteLine("人员:");
                Console.WriteLine(" 姓名:" + per.Name);
                Console.WriteLine(" 年龄:" + per.Age);
                foreach (Books b1 in per.BookList)
                {
                    foreach (Book b in b1.BookList)
                    {
                        Console.WriteLine(" 书:");
                        Console.WriteLine("     ISBN:" + b.ISBN);
                        Console.WriteLine("     书名:" + b.Title);
                    }
                }
            }
            Console.ReadKey();
        }
时间: 2024-08-26 17:14:08

虚拟化和反序列化的相关文章

第五节:控制序列化和反序列化的数据

本章前面讨论过,控制序列化和反序列化过程的最佳方式就是使用OnSerializing.OnSerialized.OnDeserializing.OnDeserialized.NonSerialized.OptionalField等attribute.然而,在一些极少见的情况下,这些attribute不能提供你希望的全部控制.除此之外,格式化器在内部使用了反射,而反射的速度比较慢,这会增大序列化和反序列化对象所化的时间.为了序列化/反序列化的数据进行完全的控制,并避免使用反射,你的类型可实现ISe

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

Linux 部署KVM虚拟化平台

简单介绍 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案.KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度:虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程.这使得 KMV 能够使用 Linux 内核的已有功能. 但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示

二叉树的序列化和反序列化

http://blog.csdn.net/qq_27703417/article/details/70958692 先序遍历二叉树,如果遇到空节点,就在str的末尾加上"#!","#"表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,"!"表示一个值的结束.如果遇到不为空的节点,假设节点值为3,就在str的末尾加上"3!".现在请你实现树的先序序列化. 先序遍历 import java.util.*; //使用递归

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

学习虚拟化技术需要掌握的知识与能力(未完成版)

我从1993年学习计算机,有过短期的C语言开发经历,现在主要从事网络与系统集成的工作.我可以算是学习计算机比较"早"的一批人了. 1993年的时候,我是从MS-DOS 3.30开始,直到最后的MS-DOS 6.22.Windows系统是从Windows 3.1(中文版)开始,再到Windows 3.11.Windows 95.98一直到现在的Windows 10. 组建Windows网络是在1996年河北省国税局全省联网,是从Windows NT 3.51开始,到后来的Windows

Windwos Hyper-v嵌套虚拟化

现在微软的虚拟化越来越成熟,许多人也渐渐的开始研究微软的Hyper-V的虚拟化,但是苦于没有太多的电脑提供部署环境,再加上之前的windwos版本是不支持在虚拟机中安装Hyper-V,让大家头大. 现在的win10和win server 2016都已经支持嵌套虚拟化,也就是说可以在虚拟机中安装Hyper-V. 首先当然是安装Hyper-V,安装过程就省略了,相信大家肯定都知道. 安装完Hyper-V后新建一台虚拟机.在这里我建立一台名为test的虚拟机. 然后以管理员方式运行powershell

序列化与反序列化

对象的序列化,反序列化 1)对象序列化,就是将Object转化为byte序列,反之叫对象的反序列化 2)序列化流(ObjectOutputStream),是过滤流----writeObject() 反序列化流(ObjectInputStream)------readObject() 3)序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常 这个接口,没有任何方法,只是一个标准

SQL Server虚拟化系列(3)&mdash;&mdash;构建理想的基于VMware的SQL Server虚拟机

虚拟化变得越来越常见,并且在不了解虚拟化如何工作的情况下,DBA在尝试解决性能问题时会出现盲点,例如减少资源争用或改进备份和恢复操作等. 在本文中我们将主要讲述为您的SQL Server工作负载构建理想的基于VMware的虚拟机.我们的下一篇文章将介绍怎么样在Hyper-V上构建对应的SQL Server虚拟化环境. 现在,作为DBA,您可能没有访问权限来创建用于SQL Server的新虚拟机.这些操作可以交给您的VM管理员,他们将为您部署合适的VM环境. 以下详细信息适用于在Windows S