【发布时间】:2011-09-14 19:33:37
【问题描述】:
我有一个从列名数组格式化的数据表,即
DataTable ThisTable = new DataTable();
for (int i = 0; i <= col.GetUpperBound(0); i++)
{
try
{
ThisTable.Columns.Add(new DataColumn(col[i].ToString(), typeof(string)));
}
catch (Exception e)
{
MessageBox.Show("Uploader Error"+e.ToString());
return null;
}
}
然后我使用BinaryFormatter 对象来序列化/反序列化内存流,以便我可以将流中的数据读取到表中。本质上,用户将上传一个 Excel 表格,该表格将被读入数据库。虽然我意识到这是可能的,我不想将工作表写入磁盘然后再读入。
但是,当我从 Deserialize() 调用中检索数据表时,我没有收到错误消息,但是我得到了一个空的 DataSet。
Mem 将是我的内存流对象。
BinaryFormatter bformat = new BinaryFormatter();
bformat.Serialize(Mem, ThisTable);
Mem.Seek(0, SeekOrigin.Begin);
byte[] bt = Mem.ToArray();
Stream s = new MemoryStream(bt);
Mem.Position = 0;
s.Position = 0;
ThisTable = (DataTable)bformat.Deserialize(Mem);
DS.Tables.Add(ThisTable);
return DS;
【问题讨论】:
-
我不认为这是要走的路......有更简单的方法来做你所说的。
-
那会是什么?
-
当你说你得到一个空的DataSet,你的意思是DataSet.Tables == null吗?还是 DataSet.Tables[0].Rows.Count == 0?
-
我的意思是我有一个来自 Deserialize() 调用的数据表,但没有行。
标签: c# serialization datatable deserialization memorystream