ViewState使用兼谈序列化

2008-07-22 15:17:00.0     浏览:1339     来源:中国IT实验室
关键词:  ViewState     使用     State  

那么再把这个类放入ViewState的话就会报错:此页的状态信息无效,可能已损坏,主要是因为它的父类DataTable中的DataRow和DataColumn等是不可序列化的,我们就需要把这个类改造成如下形式:

[SerializableAttribute]
class Test : DataTable, System.Runtime.Serialization.ISerializable
{
public Test()
{
DataColumn col = new DataColumn();
col.DataType = typeof(string);
col.ColumnName = "name";
this.Columns.Add(col);
}
public object this[int index]
{
get
{
if (index >= Rows.Count)
{
return null;
}
return Rows[index]["name"];
}
set
{
DataRow row = NewRow();
row["name"] = value;
Rows.Add(row);
}
}
public Test(SerializationInfo info, StreamingContext context)
{
DataColumn col = new DataColumn();
col.DataType = typeof(string);
col.ColumnName = "name";
this.Columns.Add(col);
ArrayList list = info.GetValue("list", typeof(ArrayList)) as ArrayList;
foreach (string value in list)
{
DataRow row = NewRow();
row["name"] = value;
Rows.Add(row);
}
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
ArrayList list = new ArrayList();
foreach (DataRow row in this.Rows)
{
list.Add(row["name"]);
}
info.AddValue("list", list);
}
}


1、实现ISerializable接口

2、实现GetObjectData方法,这个方法中就是把要序列化的对象放入info中,特别注意放入info中的对象本身必须是可以序列化的,如果放入一个DataRow对象,就会报错:未标记为可序列化

3、实现public Test(SerializationInfo info, StreamingContext context) 构造函数,这个函数就是一个反序列化的操作,把info中的对象取出来

经过上面的改造之后,就可以把这个Test对象放入ViewState中了

[上一页]   [第1页]   [第2页]