[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>

程序运行结果

 

posted @ 2022-07-01 15:19  xiaoshuye  阅读(81)  评论(0编辑  收藏  举报