Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# excel工作簿的字节数组_C#_Asp.net_Arrays_Excel_Byte - Fatal编程技术网

C# excel工作簿的字节数组

C# excel工作簿的字节数组,c#,asp.net,arrays,excel,byte,C#,Asp.net,Arrays,Excel,Byte,我正在尝试将字节数组转换为excel工作簿。当我这样做的时候 Response.BinaryWrite(renderedBytes); 它工作正常,文件符合预期。但是,当我尝试使用我在网上找到的这个工具时: private Object ByteArrayToObject(byte[] arrBytes) { MemoryStream memStream = new MemoryStream(); BinaryFormatter binForm = new BinaryForm

我正在尝试将字节数组转换为excel工作簿。当我这样做的时候

Response.BinaryWrite(renderedBytes);
它工作正常,文件符合预期。但是,当我尝试使用我在网上找到的这个工具时:

private Object ByteArrayToObject(byte[] arrBytes)
{
    MemoryStream memStream = new MemoryStream();
    BinaryFormatter binForm = new BinaryFormatter();
    memStream.Write(arrBytes, 0, arrBytes.Length);
    memStream.Seek(0, SeekOrigin.Begin);
    Object obj = (Object)binForm.Deserialize(memStream);
    return obj;
}
我得到一个错误:

System.Runtime.Serialization.SerializationException: Binary stream '0' does not contain a valid BinaryHeader. Possible causes are invalid stream or object version change between serialization and deserialization.
二进制写入和反序列化的工作方式有区别吗?我怎样才能修好它


谢谢

我假设您正在尝试执行
对象工作簿=ByteArrayTobObject(renderedBytes),结果显示它没有按预期工作

因为您正在声明
Response.BinaryWrite(renderdbytes)
按预期工作(您的意思可能是您可以保存响应并在Excel中打开它),
renderedBytes
中的二进制数据是Excel文件格式的有效Excel工作簿

似乎您正在尝试使用
BinaryFormatter
解析
renderedBytes
中包含的Excel文件格式的数据
BinaryFormatter
但是,它不知道如何解析Excel文件格式:它设计用于解析特定的(专有的?)二进制序列化格式,而不是其他格式。也就是说,您只能使用它来反序列化通过调用
BinaryFormatter.Serialize
生成的数据。Excel文件不符合此要求

为了实际将二进制形式的Excel工作簿解析为C#对象,您必须使用一个可以这样做的库,例如:


如果您使用您正在编码的语言的标记对此进行标记,和/或将得到更好的响应。
private ExcelPackage ByteArrayToObject(byte[] arrBytes)
{
    using (MemoryStream memStream = new MemoryStream(arrBytes))
    {
        ExcelPackage package = new ExcelPackage(memStream);
        return package;
    }
}