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