【最佳實踐系列】基於序列化技術的XML數據源操作模式

假定應用程序的輸入數據來自於一個結構化的XML文件,那麼首先我們要根據需要的數據格式設計類型(class),其中要求類型中的公共屬性能夠被XML序列化,例如Dictionary<T,T>類型就不能直接被序列化而List<T>則能夠。保存數據時,直接將類型實例序列化到外部XML文件中即可;讀取時則反序列化,這樣能夠簡化XML文件的讀寫邏輯,有利於應用程序的快速實現。舉例如下:

下面的例子需要引用using System.IO和using System.Xml.Serialization命名空間。

1、設計類型:兩個表示學生信息的簡單類

    /// <summary>
    /// 一個學生信息類
    /// </summary>
    //無需[Serializable]特性聲明
    public class Student
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public List<double> Scores { get; set; }
        public Student()
        {
            Id = string.Empty;
            Name = string.Empty;
            Scores = new List<double>();
        }
    }
    /// <summary>
    /// 某個班級的學生信息類
    /// </summary>
    public class ClassStudents
    {
        public string Class { get; set; }
        public List<Student> Students { get; set; }
        public ClassStudents()
        {
            Class = string.Empty;
            Students = new List<Student>();
        }
    }


2、XML文件的讀寫

    private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Student s1 = new Student() { Id = "101", Name = "李明" };
            s1.Scores.Add(85);
            s1.Scores.Add(90);
            Student s2 = new Student() { Id = "102", Name = "張燕" };

            ClassStudents students = new ClassStudents() { Class = "三年一班" };
            students.Students.Add(s1);
            students.Students.Add(s2);

            //序列化XML
            XmlSerializer xSer = new XmlSerializer(typeof(ClassStudents)); //創建序列化對象
            using (FileStream fs = new FileStream("data.xml", FileMode.Create))
            {
                xSer.Serialize(fs, students); //將對象序列化到xml文件
            }

            //反序列化
            using (FileStream fs = new FileStream("data.xml", FileMode.Open))
            {
                var sts = xSer.Deserialize(fs); //將xml文件反序列化到對象(ClassStudents類型)
            }
        }

3、XML文件

<?xml version="1.0"?>
<ClassStudents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Class>三年一班</Class>
  <Students>
    <Student>
      <Id>101</Id>
      <Name>李明</Name>
      <Scores>
        <double>85</double>
        <double>90</double>
      </Scores>
    </Student>
    <Student>
      <Id>102</Id>
      <Name>張燕</Name>
      <Scores />
    </Student>
  </Students>
</ClassStudents>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章