且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C# 序列化与反序列化

更新时间:2022-09-16 15:56:54

C# 序列化与反序列化

using System.IO;
  using System.Runtime.Serialization.Formatters.Binary;
  using System.Runtime.Serialization.Formatters.Soap;
  using System.Xml.Serialization;
  using System.Runtime.Serialization;
  public class SerializeAndDeserialize
  {
      //1、使用BinaryFormatter进行串行化
      public void SerializeNow()
      {
          ClassToSerialize c = new ClassToSerialize();
          FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Create);
          BinaryFormatter b = new BinaryFormatter();
          b.Serialize(fileStream, c);
          fileStream.Close();
      }
 
      public void DeSerializeNow()
      {
          ClassToSerialize c = new ClassToSerialize();
          c.Sex = "kkkk";
          FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
            BinaryFormatter b = new BinaryFormatter();
          c = b.Deserialize(fileStream) as ClassToSerialize;
          Console.WriteLine("Output :" + c.name);
          Console.WriteLine("Output :" + c.id);
          Console.WriteLine("Output :" + c.Sex);
          fileStream.Close();
      }
 
      // 2、使用SoapFormatter进行串行化
      public void SerializeNow_Soap()
      {
          ClassToSerialize c = new ClassToSerialize();
          FileStream fileStream = new FileStream("c:\\temp2.dat", FileMode.Create);
          SoapFormatter s = new SoapFormatter();
          s.Serialize(fileStream, c);
          fileStream.Close();
      }
 
      public void DeSerializeNow_Soap()
      {
          ClassToSerialize c = new ClassToSerialize();
          c.Sex = "kkkk";
          FileStream fileStream = new FileStream("c:\\temp2.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
          SoapFormatter s = new SoapFormatter();
          c = s.Deserialize(fileStream) as ClassToSerialize;
          Console.WriteLine("Output :" + c.name);
          Console.WriteLine("Output :" + c.id);
          Console.WriteLine("Output :" + c.Sex);
          fileStream.Close();
      }
 
      //3、使用XmlSerializer进行串行化
      public void XMLSerialize()
      {
          Person c = new Person("cyj");
          c.Courses = new Course[2];
          c.Courses[0] = new Course("英语", "交流工具");
          c.Courses[1] = new Course("数学", "自然科学");
          XmlSerializer xs = new XmlSerializer(typeof(Person));
          Stream stream = new FileStream("c:\\cyj.HTML", FileMode.Create, FileAccess.Write, FileShare.Read);
          xs.Serialize(stream, c);
          stream.Close();
      }
      public void XMLDeserialize()
      {
          XmlSerializer xs = new XmlSerializer(typeof(Person));
          Stream stream = new FileStream("C:\\cyj.XML", FileMode.Open, FileAccess.Read, FileShare.Read);
          Person p = xs.Deserialize(stream) as Person;
          Console.WriteLine("Output :" + p.Name);
          Console.WriteLine("Output :" + p.Age.ToString());
          Console.WriteLine("Output :" + p.Courses[0].Name);
          Console.WriteLine("Output :" + p.Courses[0].Description);
          Console.WriteLine("Output :" + p.Courses[1].Name);
          Console.WriteLine("Output :" + p.Courses[1].Description);
          stream.Close();
      }
 
      //4、自定义序列化
      public void OtherEmployeeClassTest()
      {
          Employee mp = new Employee();
          mp.EmpId = 10;
          mp.EmpName = "邱枫";
          mp.NoSerialString = "你好呀";
          Stream steam = File.Open("c:\\temp3.dat", FileMode.Create);
          BinaryFormatter bf = new BinaryFormatter();
          Console.WriteLine("Output :" + "Writing Employee Info:");
          bf.Serialize(steam, mp);
          steam.Close();
          mp = null;
          //反序列化
          Stream steam2 = File.Open("c:\\temp3.dat", FileMode.Open);
          BinaryFormatter bf2 = new BinaryFormatter();
          Console.WriteLine("Output :" + "Reading Employee Info:");
          Employee mp2 = (Employee)bf2.Deserialize(steam2);
          steam2.Close();
          Console.WriteLine("Output :" + mp2.EmpId);
          Console.WriteLine("Output :" + mp2.EmpName);
          Console.WriteLine("Output :" + mp2.NoSerialString);
      }
  }
 
  [Serializable]
  public class ClassToSerialize
  {
      public int id = 100;
      public string name = "Name";
      [NonSerialized]
      public string Sex = "男";
  }
 
 
  [Serializable]
  public class Person
  {
      private string name;
      public string Name
      {
          get
          {
              return name;
          }
          set
          {
              name = value;
          }
      }
 
 
      public string Sex;
      public int Age = 31;
      public Course[] Courses;
 
      public Person()
      {
      }
      public Person(string Name)
      {
          name = Name;
          Sex = "男";
      }
  }
  [Serializable]
  public class Course
  {
      public string Name;
      [XmlIgnore]
      public string Description;
      public Course()
      {
      }
      public Course(string name, string description)
      {
          Name = name;
          Description = description;
      }
  }
 
 
  [Serializable]
  public class Employee : ISerializable
  {
      public int EmpId = 100;
      public string EmpName = "work hard work smart work happy";
      [NonSerialized]
      public string NoSerialString = "NoSerialString-Test";
      public Employee()
      {
      }
      private Employee(SerializationInfo info, StreamingContext ctxt)
      {
          EmpId = (int)info.GetValue("EmployeeId", typeof(int));
          EmpName = (String)info.GetValue("EmployeeName", typeof(string));
      }
      public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
      {
          info.AddValue("EmployeeId", EmpId);
          info.AddValue("EmployeeName", EmpName);
      }
  }

 

 

C# 序列号与反序列化总结

 1、 C# 序列化与反序列化(此文)

2、C# Serializable对象序列化的作用 



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/12/22/2297921.html,如需转载请自行联系原作者