查看: 675|回复: 0

[ASP.NET教程] C#中怎样实现序列化和反序列化

发表于 2017-9-27 08:00:00
尚学堂AD

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

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

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

具体实现步骤如下

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

  1. //说明该类可以被序列化
  2. [Serializable]
  3. public class Peoson
  4. {
  5. private int age;
  6. private string name;
  7. public int Age
  8. {
  9. get { return age; }
  10. set { age = value; }
  11. }
  12. public string Name
  13. {
  14. get { return name; }
  15. set { name = value; }
  16. }
  17. public Peoson() { }
  18. public Peoson(string name,int age) {
  19. this.age = age;
  20. this.name = name;
  21. }
  22. public void say() {
  23. Console.WriteLine("名字:{0},年龄小贝",name,age);
  24. }
  25. }
复制代码

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

  1. static void Main(string[] args)
  2. {
  3. //准备集合并为其添加数据
  4. List<Peoson> list = new List<Peoson>();
  5. Peoson p1 = new Peoson("小黄", 18);
  6. Peoson p2 = new Peoson("小白", 28);
  7. Peoson p3 = new Peoson("小青", 15);
  8. list.Add(p1);
  9. list.Add(p2);
  10. list.Add(p3);
  11. //序列化
  12. SerializeMethod(list);
  13. //反序列化
  14. List<Peoson> list2= ReserializeMethod();//调用反序列化的方法 其方法返回值是一个List集合
  15. foreach (Peoson item in list2)//遍历集合中的元素
  16. {
  17. item.say();
  18. }
  19. Console.ReadKey();
  20. }
  21. //序列化操作
  22. public static void SerializeMethod(List<Peoson> list) {
  23. using (FileStream fs=new FileStream("序列化.btn",FileMode.Create))
  24. {
  25. BinaryFormatter bf = new BinaryFormatter();
  26. bf.Serialize(fs,list);
  27. Console.WriteLine("序列化成功!");
  28. }
  29. }
  30. //反序列化操作
  31. public static List<Peoson> ReserializeMethod()
  32. {
  33. using(FileStream fs=new FileStream("序列化.btn",FileMode.Open)){
  34. BinaryFormatter bf = new BinaryFormatter();
  35. List<Peoson> list = (List<Peoson>)bf.Deserialize(fs);
  36. return list;
  37. }
  38. }
  39. }
复制代码

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



回复

使用道具 举报