xml序列化

  经常使用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转换成一个对象了!

 

你可能感兴趣的:(xml)