96
外匯
序列化和反序列化
序列化:是將對象狀態轉換為可保持或傳輸的格式的過程,例如可以將一個對象序列化後使用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();
}
最後更新:2017-04-02 04:00:25