[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>
程序运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义