(转)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;
}