在 .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;

}

(转)xml序列化的更多相关文章

  1. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

  2. .NET中XML序列化的总结

    [题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...

  3. XML序列化和反序列化

    上篇总结了下JSON的序列化和反序列化,博园中大牛给了很多牛叉的评论,学习了不少. 不过在上篇中忘了把json序列化和反序列化的另外一种方式写上去了,这里做个简单的补充: Json篇:http://w ...

  4. XML 序列化与反序列化

    XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...

  5. 关于XML序列化与CultureInfo

    不同的计算机系统可能有着不同的CultureInfo,例如在中文环境下日期通常这样显示03/30/2016,而在有的操作系统下它可能是这样的30.3.2016. 这样的话带来一个问题,例如在中文环境下 ...

  6. XmlSerializer 对象的Xml序列化和反序列化

    http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...

  7. C#的XML序列化及反序列化

    webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...

  8. .NET XML序列化与反序列化

    闲着没事,写了两个通用的XML序列化与反序列化的方法. 贴出来当作笔记吧! /// <summary> /// XML序列化 /// </summary> /// <ty ...

  9. Windows Phone 七、XML序列化

    DataContractSerializer对象 public class Person { public int Id { get; set; } public string Name { get; ...

  10. Xml 序列化

    1 XML序列化只能序列化对象的公有属性,并且要求对象有一个无参的构造方法,否者无法反序列化. 2 [Serializable]和[NonSerialized]特性对XML序列化无效!所以使用XML序 ...

随机推荐

  1. 根据指定的commit查找对应的log

    find commit by hash sha in git 问题: I need to find a commit in Git by given hash SHA. For example, if ...

  2. Python 几个重要的内置函数

    所谓内置函数,就是在Python中被自动加载的函数,任何时候都可以用.内置函数,这意味着我们不必为了使用该函数而导入模块.不必做任何操作,Python 就可识别内置函数.在学习Python的过程中,有 ...

  3. [转]Unity 3D旋转矢量方向及二维平面基于一点选择另一点(Rotate a Vector3 direction & Rotate a point about another point in 2D )

    http://specialwolf.blog.163.com/blog/static/124466832201301332432766/ ****************************** ...

  4. 【转】iOS开发者申请发布证书及真机调试图文详解

    原文网址:http://www.tqcto.com/article/mobile/57822.html 打开iOS Dev Center,选择Sign in,登陆(至少99美元账号),登陆之后在网页右 ...

  5. android 中对apache httpclient及httpurlconnection的选择

    在官方blog中,android工程师谈到了如何去选择apache client和httpurlconnection的问题: 原文见http://android-developers.blogspot ...

  6. [PeterDLax著泛函分析习题参考解答]第2章 线性映射

    1. 验证两个线性映射的复合仍是线性映射而且满足分配律: $$\bex {\bf M}({\bf N}+{\bf K})={\bf M}{\bf N}+{\bf M}{\bf K},\quad ({\ ...

  7. DevExpress中XtraGrid控件对GridView每行的颜色设置 zt

    改变行颜色 private void GridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArg ...

  8. Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1357  Solved: 446[Submit][Statu ...

  9. (DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device

    Linux kernel 是怎么将 devicetree中的内容生成plateform_device 1,实现场景(以Versatile Express V2M为例说明其过程)以arch/arm/ma ...

  10. Yii 的AR单行数据自动缓存机制

    相关的YII类: CActiveRecord CActiveRecordBehavior cache Active Record Active Record (AR) 是一个流行的 对象-关系映射 ( ...