zoukankan      html  css  js  c++  java
  • (转)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;

       }

  • 相关阅读:
    go基础_defer
    go基础_函数
    go基础_控制语句
    go基础_数组
    go基础_切片
    go命令行参数
    Hdu2795Billboard线段树
    Hdu1394Minimum Inversion Number线段树
    Hdu1754单点更新
    Hdu1166单点更新线段树
  • 原文地址:https://www.cnblogs.com/wanshutao/p/3524189.html
Copyright © 2011-2022 走看看