探讨:使用XMLSerialize 序列化与反序列化

概念:XML序列化是将公共字段和属性转化为序列格式(这里指XML),以便存储或传输的过程。反序列化则是从XML中重新创建原始状态的对象.

  

复制代码 代码如下:

  class SerializeDemo

  {

  static void Main()

  {

  EmployeeCollection employeeCollection = new EmployeeCollection()

  {

  Employees = Employeer.Employees()

  };

  XmlSerializer serialize = new XmlSerializer(typeof(EmployeeCollection));

  string filePath = @"E:\PProject\Test\Employee.xml";

  SerializeEmployee(serialize, filePath, employeeCollection);

  DeserializeEmployee(serialize, filePath);

  }

  static void SerializeEmployee(XmlSerializer serialize, string filePath, EmployeeCollection employeeCollection)

  {

  using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))

  {

  serialize.Serialize(fs, employeeCollection);

  }

  }

  static void DeserializeEmployee(XmlSerializer serialize,string filePath)

  {

  using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))

  {

  EmployeeCollection collection = (EmployeeCollection)serialize.Deserialize(fs);

  collection.Employees.ForEach(e => Console.WriteLine("Name:{0},Gender:{1},Age:{2},Education:{3}", e.userName, e.gender, e.age, e.education));

  }

  }

  }

  [Serializable]

  public class EmployeeCollection

  {

  public List<Employeer> Employees { get; set; }

  }

  [Serializable]

  public class Employeer

  {

  public string userId { get; set; }

  public string userName { get; set; }

  public string gender { get; set; }

  public int age { get; set; }

  public List<WorkExperience> workExperience { get; set; }

  public string education { get; set; }

  public static List<Employeer> Employees()

  {

  return new List<Employeer>()

  {

  new Employeer()

  {

  userId = "0001",

  userName = "guoHu",

  gender="Man",

  age=25,education="underGraduate",

  workExperience = WorkExperience.GetWorkExperience("0001")

  }

  };

  }

  }

  [Serializable]

  public class WorkExperience

  {

  public string userId { get; set; }

  public string companyName { get; set; }

  public string seniority { get; set; }

  public static List<WorkExperience> GetWorkExperience(string userId)

  {

  List<WorkExperience> workExperience = new List<WorkExperience>();

  Unity unity = Unity.GetInstance();

  DataTable table = new DataTable();

  unity.GetTable(out table);

  var experiences = (from experience in table.AsEnumerable()

  where experience.Field<string>("UserId") == userId

  select new

  {

  companyName = experience.Field<string>("CompanyName"),

  seniority = experience.Field<string>("Seniority")

  }).ToList();

  experiences.ForEach(e => workExperience.Add(new WorkExperience() { companyName = e.companyName, seniority = e.seniority }));

  return workExperience;

  }

  }

  public class Unity

  {

  public static DataTable tables = new DataTable();

  public static DataRow dr;

  public static DataColumn dc = new DataColumn();

  public static object objLock = new object();

  public static Unity unityInstance;

  private Unity()

  {

  }

  public static Unity GetInstance()

  {

  if (unityInstance == null)

  {

  lock (objLock)

  {

  if (unityInstance == null)

  {

  unityInstance = new Unity();

  }

  }

  }

  return unityInstance;

  }

  public void GetTable(out DataTable dt)

  {

  unityInstance.CreateTable();

  dr = tables.NewRow();

  dr["UserId"] = "0001";

  dr["CompanyName"] = "WireSoft";

  dr["Seniority"] = "2012.02-2012.05";

  tables.Rows.Add(dr);

  dr = tables.NewRow();

  dr["UserId"] = "0001";

  dr["CompanyName"] = "Jin Xun";

  dr["Seniority"] = "2009.07-2011.02";

  tables.Rows.Add(dr);

  dr = tables.NewRow();

  dr["UserId"] = "0002";

  dr["CompanyName"] = "Hua Wei";

  dr["Seniority"] = "2011.07-";

  tables.Rows.Add(dr);

  dt = tables.Copy();

  }

  public  void CreateTable()

  {

  dc = new DataColumn("UserId", System.Type.GetType("System.String"));

  tables.Columns.Add(dc);

  dc = new DataColumn("companyName", System.Type.GetType("System.String"));

  tables.Columns.Add(dc);

  dc = new DataColumn("seniority", System.Type.GetType("System.String"));

  tables.Columns.Add(dc);

  }

  }