[CSharpTips]C# Xml文件反序列化
C# Xml文件反序列化
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml.Serialization; namespace XmlToObjectTest { class Program { static void Main(string[] args) { List<Student> students = new List<Student>(); students.Add(new Student { Name = "张三", Age = 15, Gender = '男', Height = 150, Weight = 70 }); students.Add(new Student { Name = "李四", Age = 17, Gender = '男', Height = 166, Weight = 62 }); students.Add(new Student { Name = "王二", Age = 19, Gender = '男', Height = 155, Weight = 70 }); students.Add(new Student { Name = "麻子", Age = 18, Gender = '男', Height = 175, Weight = 82 }); SaveListToXML(students, Environment.CurrentDirectory + "\\Student.xml"); var result = DeserializeObject<List<Student>>(Environment.CurrentDirectory + "\\Student.xml"); foreach (var item in result) { Console.WriteLine(item.Name+" "+item.Age+" "+item.Gender+" "+item.Height+" "+item.Weight); } Console.ReadLine(); } /// <summary> /// 保存List对象集合到XML文件(序列化方式) /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="list">List集合</param> /// <param name="xmlPath">保存的路径</param> private static void SaveListToXML(object obj, string xmlPath) { XmlSerializer serializer = new XmlSerializer(obj.GetType()); string content = string.Empty; //serialize using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, obj); content = writer.ToString(); } //save to file using (StreamWriter stream_writer = new StreamWriter(xmlPath, false, Encoding.Unicode)) { stream_writer.Write(content); } } /// <summary> /// 反序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="xml"></param> /// <returns></returns> private static T DeserializeObject<T>(string xml) where T : class { //using (var str = new StringReader(xml)) using (var str = File.OpenRead(xml)) { var xmlSerializer = new XmlSerializer(typeof(T)); var result = (T)xmlSerializer.Deserialize(str); return result; } } } public class Student { public string Name { get; set; } public int Age { get; set; } public char Gender { get; set; } public int Height { get; set; } public double Weight { get; set; } } }
Xml文件
<?xml version="1.0" encoding="utf-16"?> <ArrayOfStudent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Student> <Name>张三</Name> <Age>15</Age> <Gender>30007</Gender> <Height>150</Height> <Weight>70</Weight> </Student> <Student> <Name>张三</Name> <Age>16</Age> <Gender>30007</Gender> <Height>170</Height> <Weight>75</Weight> </Student> <Student> <Name>李四</Name> <Age>17</Age> <Gender>30007</Gender> <Height>166</Height> <Weight>52</Weight> </Student> <Student> <Name>王二</Name> <Age>19</Age> <Gender>30007</Gender> <Height>155</Height> <Weight>70</Weight> </Student> <Student> <Name>麻子</Name> <Age>18</Age> <Gender>30007</Gender> <Height>175</Height> <Weight>82</Weight> </Student> </ArrayOfStudent>
程序运行结果