经常使用XML做接口,而解析XML有的时候也比较麻烦,最近用了一个新的解析方法,用序列化的方式来解析!
1,如有下面这样一个xml文件,如下:
<?xml version="1.0" encoding="utf-8" ?> <ns2:Student xmlns:ns2="http://v3.hotel.wsapi.ean.com/" hotelId="117548"> <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> </ns2:Student>
这是一个比较简单的xml了,如何用序列化呢?,
一,我们先建一个序列化类,类名为Student,这个类名不是随便起的,要和xml文件的根节点名一样,我这个根节点前加了一个ns2:下面说,这是为什么?
Student类如下:
[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; } } }
这个类里面的第一个属性都和 xml文件Student根节点下的节点名一样,记住一定要一样!
在Student类里面有一个有一个Course[]数组,名为Courese的属性,为什么要定义一个这样的数组属性呢?
我们先看看我们上面的 xml文件,在xml文件的Student的根节点下有一个Courese节点,所以我们就要起一个Courese的属性名,
而Courese根节点下面又有两个同样的Course节点,所以这个属性就要定义成一个Course[] 数组类型的属性了!
Course类如下
[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; } } }
这样类写完了,
protected void Button2_Click(object sender, EventArgs e) { string temp = HttpContext.Current.Server.MapPath("ccc.xml"); StreamReader sr = null; string str = ""; sr = new StreamReader(temp, Encoding.UTF8); str = sr.ReadToEnd(); str = str.Replace("ns2:", string.Empty); HotelPaymentResponse Model = XmlDeserialize<HotelPaymentResponse>(str, Encoding.UTF8); }
这样就把一个类xml转换成一个对象了!