(转)xml序列化

  .NET Framework 中提供两种串行化方法,一种是二进制法,另一种是xml串行化。 

  

   序列化是将对象状态转换为可保持或传输的格式的过程,xml序列化是将对象的公共字段和属性序列化为xml流。由于xml是一个开放式标准,因此对于通过web共享数据而言,这是一个很好的选择。

    

     将对象序列化,可以将对象状态永久保存在存储媒体上,以便可以在以后创建更精确的副本;同时,通过值可以将对象一个应用程序域发送到另一个应用程序域中。

 

    xml序列化中最主要的类是XmlSerializer 类,它的最重要的方法是Serializer和Deserializer方法。使用xmlSerializer可以将以下几项序列化:公共类的公共读/写属性,字段; 实现ICollection或IEnumerable的类;xmlElement对象;xmlNode对象;Dataset对象。下面以一个很简单的例子演示一下:

      首先导入命名空间:using System.Xml.Serialization;和using System.IO;并且创建一个student类:

 

     
        //创建一个公共类
        public class Student
        {
            public string studentName = null;
            public int studentAge = 0;
            private decimal money = 0;

            public decimal Money
            {
                get { return money; }
                set { money = value; }
            }

        }

     然后在主方法里序列化:

 

 

 

 

 

static void Main()

        { 

  //1.创建对象并赋值它的公共字段和属性

 

            Student st = new Student();

            st.studentName = "李四, st.studentAge = 20;

 

      //2.使用该对象的类型构造 XmlSerializer

 

            XmlSerializer myxml=new XmlSerializer(typeof(Student));

 

     //3.创建一个StreamWriter对象

 

            StreamWriter sw = new StreamWriter("student.xml");

 

         //3.调用Serialize方法生成对象的XML流形式或文件形式

 

            myxml.Serialize(sw, st);

            sw.Close();         }

序列化数组这里就不写了,有兴趣的可以一起讨论。

 

与xml序列化对应的是xml反序列化,这里我就用一个dataset实例说明序列化与反序列化:

 

首先序列化DataSet:

 

DataSet ds=new DataSet();

 

DataTable dt=new DataTable("st");

 

DataColumn dc=new DataColumn("学号",typeof(int));

dt.Columns.Add(dc);

 

dc=new DataColumn("姓名",typeof(string));

dt.Column.Add(dc);

 

DataRow dr=dt.newRow();

 

dr["学号"]=1001;  dr["姓名"]="小王";

 

dt.Rows.Add(dr);

 

ds.Table.Add(dt);

 

xmlSerializer xs=new xmlSerializer(typeof(Dataset));

 

TextWriterts tw=new StreamWriter("zw.xml");

 

xs.Seralizer(tw,ds);

 

 

 

反序列化:

 

DataSet ds=new DataSet();

 

DataTable dt=new DataTaBle("st");

 

ds.Tables.Add(dt);

 

xmlserializer xs=new xmlserializer(typeof(DataSet));

 

Filestream fs=new  FileStram("路径",FileMode.Open);

 

ds=(DataSet)xs.DeSerializer(fs);

 

for(int i=0;i<ds.Tables["st"].Rows.count;i++)

{

     Console.WriteLine(ds.Table["st"].Rows[i][""].Tostring());

}

 

 

 

 

 public class Student

    {

      public string studentName; 

      public int studentAge;

   }

posted @ 2014-01-17 15:57  wanshutao  阅读(455)  评论(0编辑  收藏  举报