C#溫故而知新學習系列之XML編程—8-XMLSerializer類把XML文檔反序列化爲對象

        前言

  之前我在一家電子商務公司做接口對接工作,同步快遞公司給我們網站的訂單數據,在這裏我先給出快遞公司給我的接口文檔(見下圖),我當時的做法是通過XmlDocument以及XmlElement,XmlNodeList等類去解析這個文檔的,然後找到我要的數據更新至我們的數據庫的,其實在這裏有個更簡單的做法,就是反序列化,把XML文檔反序列化爲對象。

  

 

   實現步驟

  一:XML文件編寫

  我們以學生科目爲例

  1.1 Student.xml

  <?xml version="1.0" encoding="utf-8" ?>
  <Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <!-- 姓名-->
   <Name>小強</Name>
   <!-- 性別-->
   <Sex>男</Sex>
   <!-- 年齡-->
   <Age>20</Age>
   <!-- 課程集合-->
   <Courses>
      <!-- 課程-->
      <Course>
         <!-- 課程名稱-->
         <CourseName>英語</CourseName>
         <!-- 課程分數-->
         <Grade>92</Grade>
         <!-- 課程描述-->
         <CourseDescription>英語是一門全球應用最廣泛的語言</CourseDescription>
      </Course>
      <Course>
       <CourseName>數學</CourseName>
       <Grade>98</Grade>
       <CourseDescription>俗話說學好數理化走遍天下都不怕</CourseDescription> 
     </Course>
   </Courses>
  </Student>

  二:代碼文件編寫

  映射的實體類

  1.1 Student.cs

  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Xml;
  using System.Xml.Serialization;

  namespace MyXmlSerializer
  {

     [Serializable]
        public class Student
         {
            //姓名
            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            //性別
            private string _sex;
            public string Sex
            {
                get { return _sex; }
                set { _sex = value; }
            }
            //年齡
            private int _age;
            public int Age
            {
                get { return _age; }
                set { _age = value; }
            }
            //課程集合
            private Course[] _courses;
            public Course[] Courses
            {
                get { return _courses; }
                set { _courses = value; }
            }
        }     

    }

        //課程類

    [Serializable]
       public class Course
       {
          //科目名稱
          private string _coursename;
          public string CourseName
          {
              get { return _coursename; }
              set { _coursename = value; }
          }
          //科目分數
          private int _grade;
          public int Grade
          {
              get { return _grade; }
              set { _grade = value; }
          }
          //科目描述
          private string _coursedescription;
          public string CourseDescription
          {
              get { return _coursedescription; }
              set { _coursedescription = value; }
          }
      } 
  }

  1.2 Form.cs

  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Text;
  using System.Windows.Forms;
  using System.Xml;
  using System.Xml.Serialization;
  using System.IO;

  namespace MyXmlSerializer
  {
      public partial class Form3 : Form
      {
          public Form3()
          {
              InitializeComponent();
          }  

          /// <summary>
          /// 把XML文檔反序列化爲對象
          /// </summary>
          /// <param name="sender"></param>
          /// <param name="e"></param>
          private void btnDeserialize_Click(object sender, EventArgs e)
          {
              XMLDeserialize();
          }

          /// <summary>
          /// XML文檔反序列化
          /// </summary>
          public void XMLDeserialize()
          {
              XmlSerializer xs = new XmlSerializer(typeof(Student));
              Stream stream = new FileStream("http://www.cnblogs.com/Student.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
              Student student = xs.Deserialize(stream) as Student;
              MessageBox.Show(student.Name);
              MessageBox.Show(student.Age.ToString());
              MessageBox.Show(student.Courses[0].CourseName);
              MessageBox.Show(student.Courses[0].Grade.ToString());
              MessageBox.Show(student.Courses[0].CourseDescription);
              MessageBox.Show(student.Courses[1].CourseName);
              MessageBox.Show(student.Courses[1].Grade.ToString());
              MessageBox.Show(student.Courses[1].CourseDescription);
              stream.Close();
           }
      }
  }

  運行效果

  當我們點擊“把XML文檔反序列化爲對象”按鈕後,依次彈出“小強”,“20”等消息。

  

  

  

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