序列化:是将对象状态转换为可保持或传输的格式的过程,例如可以将一个对象序列化后使用Http通过Internet在客户端和服务器之间传输该对象;
反序列化:将流转换为对象;
.NET框架提供的序列化方式:二进制序列化、XML序列化;
代码演示:(1)二进制序列化
用到的命名空间:
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
①自定义一个类,MyObject.cs
[Serializable] //指明这个类可以被序列化 public class MyObject { public MyObject() { } public int n1 = 0; public int n2 = 0; public string str = null; public double Add(double a, double b) { return a+b; } }
2.二进制序列化对象:
protected void Button1_Click(object sender, EventArgs e) { MyObject my = new MyObject(); my.n1 = 1; my.n2 = 2; my.str = "hello"; IFormatter ifm = new BinaryFormatter(); Stream strm = new FileStream(Server .MapPath(@"my.xs"),FileMode .Create , FileAccess.Write ,FileShare.None );//保存为自己想要的文本格式 ifm.Serialize(strm, my); strm.Close(); Response.Write("序列化对象成功!"); }
3.将二进制文件反序列化为实体类:
IFormatter ifm = new BinaryFormatter(); Stream strm = new FileStream(Server.MapPath(@"my.xs"), FileMode.Open, FileAccess.Read); MyObject my = (MyObject)ifm.Deserialize(strm); strm.Close(); Response.Write("调用反序列化后的对象的属性为n1:"+my.n1+"n2:"+my.n2+"str:"+my.str+"<BR>"); Response.Write("调用反序列化后的对象的Add方法计算的值:" + my.Add(1.1, 5.3).ToString());
代码演示(2)XML格式序列化:
用到的命名空间:
using System.IO;
using System.Xml.Serialization;
①代码生成一个DataSet并将它序列化为XML格式:
protected void Button3_Click(object sender, EventArgs e) { DataTable DT = new DataTable(); DataColumnCollection DCC = DT.Columns; DCC.Add(new DataColumn("ID",typeof (int ))); DCC.Add(new DataColumn("Name", typeof(string))); DCC.Add(new DataColumn("Age", typeof(short ))); for (int i = 0; i < 10;i++ ) { DataRow DR = DT.NewRow(); DR["ID"] = i; DR["Name"] = "name" + i.ToString(); DR["Age"] = 20 + i; DT.Rows.Add(DR); } DataSet ds = new DataSet(); ds.Tables.Add(DT); SerializeDataSet(Server.MapPath(@"User.xml"), ds); } private void SerializeDataSet(string filename, DataSet ds) { XmlSerializer ser = new XmlSerializer(typeof (DataSet )); TextWriter writer = new StreamWriter(filename); ser.Serialize(writer ,ds); writer.Close(); }
②将XML文件反序列化回来:
protected void Button4_Click(object sender, EventArgs e) { XmlSerializer ser = new XmlSerializer(typeof(DataSet)); FileStream fs = new FileStream(Server .MapPath (@"User.xml"),FileMode .Open); DataSet ds = (DataSet)ser.Deserialize(fs); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); fs.Close(); }