• C#对象序列化


    1.序列化和反序列化

      对象序列化是将对象(比如Person对象)转换为二进制数据,反序列化是将二进制数据还原为对象,对象是稍纵即逝的,不仅程序重启,操作系统重启会造成对象的消失,就是推出函数范围等都可能造成对象的小时,序列化或者反序列化就是为了保持对象的持久化,就像用DV录像(序列化)和用播放器(反序列化)一样。

    2.BinaryFormatter类有2个方法:

      (1)void Serialize(Stream stream,object graph)对象graph序列化到stream中

      (2)object Deserialize(Stream stream) 将对象从stream中反序列化,返回值为序列化得到的对象。

    3.注意:不是所有的对象都能序列化,只有可序列化的对象才能序列化,所以必须在类声明上添加[Serializable]

    4.例子:

    namespace text
    {
        class Program 
        {
            static void Main(string[] args)
            {
                List<Person> personList = new List<Person> { new Person("zhao", 1),new Person("zhang",2) };
                //写入
                using (FileStream fsWrite = new FileStream(@"C:UsersasusDesktop111.txt", FileMode.Create))
                {
                    //可以将数据转化为二进制数据
                    BinaryFormatter binaryFormatter = new BinaryFormatter();
                    //使用binaryFormatter对象将personList集合转换为二进制数据,以流的形式写入到指定文件
                    binaryFormatter.Serialize(fsWrite, personList);
                }
                //读出
                using (FileStream fsRead = new FileStream(@"C:UsersasusDesktop111.txt", FileMode.Open))
                {
                    personList.Clear();
                    BinaryFormatter binaryFormatter = new BinaryFormatter();
                    personList = (List<Person>) binaryFormatter.Deserialize(fsRead);
                    foreach (Person tempPerson in personList)
                    {
                        Console.WriteLine(string.Format("姓名:{0},年龄:{1}", tempPerson.Name, tempPerson.Age));
                    }
                }
                Console.ReadKey();
            }
        }
        [Serializable]
        public class Person
        {
            private string name;
            private int age;
            public Person(string theName, int theAge)
            {
                Name = theName;
                Age = theAge;
            }
            public int Age
            {
                get { return age; }
                set { age = value; }
            }
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
        }
    }
    View Code
    111
  • 相关阅读:
    5js
    4js
    3js
    2js
    1js
    7css
    6css
    5css
    Django高级项目实战-开发企业级问答网站,学Django就这了
    Java日志第27天 2020.8.1
  • 原文地址:https://www.cnblogs.com/zwj-199306231519/p/11876970.html
Copyright © 2020-2023  润新知