• C#中怎样实现序列化和反序列化


    我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的

    因为我们如果想要将一个对象持久化到文件中 如果我们使用IO流文件流操作的话可能就没办法实现了,但是我们用序列化的话就可以轻而易举的实现,并且当我们回拿到数据的

    时候,我们拿到的也是一个对象,但是它保存到文件中是二进制文件

    具体实现步骤如下

    首先我们有一个实体对象  并且这个类是可支持序列化操作的  也就是挂载有[Serializable]标记

    复制代码
     //说明该类可以被序列化
        [Serializable]
       public class Peoson
        {
            private int age;
            private string name;
            public int Age
            {
                get { return age; }
                set { age = value; }
            }
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            public Peoson() { }
            public Peoson(string name,int age) {
                this.age = age;
                this.name = name;
            }
            public void say() {
                Console.WriteLine("名字:{0},年龄{1}",name,age);
            }
    
        }
    复制代码

    然后我们在Main函数中准备一个集合,并将上面创建的类作为集合的属性,为其添加数据,直接对该集合进行序列化操作和反序列化操作

    复制代码
     static void Main(string[] args)
            {
                //准备集合并为其添加数据
                List<Peoson> list = new List<Peoson>();
                Peoson p1 = new Peoson("小黄", 18);
                Peoson p2 = new Peoson("小白", 28);
                Peoson p3 = new Peoson("小青", 15);
               
                list.Add(p1);
                list.Add(p2);
                list.Add(p3);
    
                //序列化
                SerializeMethod(list);
    
                //反序列化
              List<Peoson> list2=  ReserializeMethod();//调用反序列化的方法  其方法返回值是一个List集合
              foreach (Peoson item in list2)//遍历集合中的元素
              {
                  item.say();
              }
    
              Console.ReadKey();
    
            }
    
            //序列化操作
            public static void SerializeMethod(List<Peoson> list) {
                using (FileStream fs=new FileStream("序列化.btn",FileMode.Create))
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(fs,list);
                    Console.WriteLine("序列化成功!");
               }
            }
    
            //反序列化操作
            public static List<Peoson> ReserializeMethod()
            { 
                using(FileStream fs=new FileStream("序列化.btn",FileMode.Open)){
    
                    BinaryFormatter bf = new BinaryFormatter();
                    List<Peoson> list = (List<Peoson>)bf.Deserialize(fs);
                    return list;
                }
            }
        }
    复制代码

    以上我们就对集合数据完成了序列化和反序列化的操作了

  • 相关阅读:
    Linux常用命令
    Linux静态函数库与动态函数库
    解决MySQL5.7的表无法插入中文的问题
    MySQL与postgreSQL在left join查询时的区别
    《刻意练习》读书笔记
    在Golang中实现与Python装饰器类似功能的方法
    项目中使用进程内缓存的一些经验及注意事项
    Golang中使用recover捕获panic的操作及遇到的一个坑
    Python与Golang中给列表中字典按照某个key排序的实现
    浅谈Python与Golang中的“延迟绑定机制”
  • 原文地址:https://www.cnblogs.com/WuXuanKun/p/5494984.html
Copyright © 2020-2023  润新知