概念: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 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 { get; set; } public string education { get; set; } public static List Employees() { return new List() { 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 GetWorkExperience(string userId) { List workExperience = new List(); Unity unity = Unity.GetInstance(); DataTable table = new DataTable(); unity.GetTable(out table);
var experiences = (from experience in table.AsEnumerable() where experience.Field("UserId") == userId select new { companyName = experience.Field("CompanyName"), seniority = experience.Field("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); } }