求助!我从前台上传一个execl表格,在后台反序列化出现“其他信息: 输入流是无效的二进制格式。开始内容(以字节为单位)是: 68-74-74-70-3A-2F-2F-62-6C-6F-67-2E-63-73-64-6E-2E...”错误。。。。。
代码是:
public string ImportCompany()
{
HttpPostedFileBase table = Request.Files["table"];
ie.ExcelToDataTable(table.InputStream);
return null;
}
public List<object> status { get; set; }
public bool ExcelToDataTable(Stream sm)
{
status = new List<object>();
status.Add(2);
status.Add("正在读取数据......");
byte[] buff = new byte[sm.Length];
sm.Read(buff, 0, (int)sm.Length);
BinaryFormatter b = new BinaryFormatter();
b.TypeFormat = System.Runtime.Serialization.Formatters.FormatterTypeStyle.TypesAlways;
DataTable t = (DataTable)b.Deserialize(new MemoryStream(buff));
return true;
}
两种可能性产生这种错误
1.在序列化时没有正确地将类型信息写入二进制流
2.流的长度已超界,你强制将long型的数据长度截断为int导致流的不完整:
sm.Read(buff, 0, (int)sm.Length);
如果过文件很大或数据量多时(对象实例庞大)这种读取就读不全,要使用while 以块方式从流中读取。