zoukankan      html  css  js  c++  java
  • C# 序列化之二进制

    序列化:又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。

    一般有三种方式:1、是使用BinaryFormatter进行串行化二进制序列化;2、使用XmlSerializer进行串行化的XML序列化;3、使用SOAP协议进行序列化。这里先总结二进制序列化。

    命名空间:System.Runtime.Serialization.Formatters.Binary;

                  System.IO;

      1).先建一个可序列化的类

     [Serializable]     
        class Person
        {
        private string name;
        public string Name
        { get { return name; }
            set { name = value; }
        }

        [NonSerialized]   //age这个字段不序列化
        private int age;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        public Person() { }
        public Person(string name ,int age) {
            this.name = name;
            this.age = age;
        }

          public void say() {
            Console.WriteLine("hello,my name is{0} ,I am {1}years old.",name,age);
        } }

    Main函数里:

      List<Person> persons = new List<Person>();//或者 Person p=new Person("chen",24);
                Person p1 = new Person("chen",24);
                Person p2 = new Person("li", 23);
                persons.Add(p1);
                persons.Add(p2);

                xuliehua(persons); //调用静态序列化方法
                fanxuliehua();       //调用静态反序列化方法

         public static void xuliehua(List<Person> persons)//序列化方法
            {
                FileStream fs = new FileStream("Person.bin", FileMode.Create);//创建一个文件流,对文件进行写入
                BinaryFormatter bf = new BinaryFormatter();//使用CLR二进制格式器
                bf.Serialize(fs,persons); //序列化到硬盘

                fs.Close();//关闭文件流
            }

            public static void fanxuliehua()//反序列化方法

    {

                FileStream fs = new FileStream("Person.bin", FileMode.Open);//打开流文件
                BinaryFormatter bf = new BinaryFormatter();
                List<Person> persons = bf.Deserialize(fs) as List<Person>;//从硬盘反序列化  

                                                                                              //或  Person p=(Person)bf.Deserialize(fs); 对应上面的或者

                fs.Close();//关闭文件流
                for (int i = 0; i < persons.Count;i++ )
                {
                    persons[i].say();
                }
            }

    结果:hello,my name is chen ,I am 0years old.

            hello,my name is li ,I am 0years old.//name 序列化过,而 age没有序列化,所以为0.

    注意:继承时,父类与子类都需要序列化。

  • 相关阅读:
    GitBook基本使用
    Window 远程桌面漏洞风险,各个厂家的扫描修复方案(CVE-2019-0708)
    应急响应实战笔记(续)
    不同系统下,复制文件时新文件的日期区别
    Window应急响应(六):NesMiner挖矿病毒
    利用python输出000至999中间的数
    揭秘骗局:这是一张会变的图片
    如何查看github排行热度
    zabbix使用自动发现功能批量监控服务器端口的可用性
    使用python脚本批量设置nginx站点的rewrite规则
  • 原文地址:https://www.cnblogs.com/anyihen/p/5506988.html
Copyright © 2011-2022 走看看