自己写了重载DataTable的类,并实现了ISerializable接口
protected BaseDataTable(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context):base()
{
System.Collections.ArrayList colNames = new System.Collections.ArrayList();
System.Collections.ArrayList colTypes = new System.Collections.ArrayList();
System.Collections.ArrayList dataRows = new System.Collections.ArrayList();
colNames = (System.Collections.ArrayList) info.GetValue("ColNames", typeof(System.Collections.ArrayList));
colTypes = (System.Collections.ArrayList) info.GetValue("ColTypes", typeof(System.Collections.ArrayList)); 
dataRows = (System.Collections.ArrayList) info.GetValue("DataRows", typeof(System.Collections.ArrayList)); 
for(int i=0; i<colNames.Count; i++)
{
System.Data.DataColumn col = new System.Data.DataColumn(colNames[i].ToString(), 
Type.GetType(colTypes[i].ToString() )); 
this.Columns.Add(col);
}
for(int i=0; i<dataRows.Count; i++)
{
System.Data.DataRow row = this.NewRow();
row.ItemArray = (object[]) dataRows[i];
this.Rows.Add(row);
}
}
这样写的一个问题是没有办法保存DataRow的DataRowState,不知道有没有办法实现ISerializable接口,并保存每一行的DataRowState

解决方案 »

  1.   

    DataRowState 有序列化标记当然可以序列化拉
    不过你要加上实现    void ISerializable.GetObjectData(
            SerializationInfo info, StreamingContext context) 
        {        info.SetType(typeof(this));    }
    方法
     FileStream fs = new FileStream("DataFile.dat", FileMode.Create);
    BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(fs, mydatatale);就可以了
      

  2.   

    DataRowState 是可以序列化,但反序列化的时候没有办法将DataRowState重新写入DataTable里面的Rows,就算序列化了也没有用