之前我在一家電子商務公司做接口對接工作,同步快遞公司給我們網站的訂單數據,在這裏我先給出快遞公司給我的接口文檔(見下圖),我當時的做法是通過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”等消息。