Microsoft.Office.Interop.Excel.WorkbookClass';在Assembly&#

本文关键字:Assembly Microsoft Interop Excel WorkbookClass Office | 更新日期: 2023-09-27 18:21:16

序列化异常:程序集"Microsoft.Office.Interop.Excel,Version=111.0.0.0,Culture=neutral,PublicKeyToken=71e9cce111e9429c"中的类型"Microsoft.Office.Enterop.Exel.WorkbookClass"未标记为可序列化。

我得到了上述例外情况。。这是代码

unsafe public void Save(IStream stream, bool clearDirty, Excel.Workbook xlbook)
{
    try
    {
        //if (stream == null)
        //{
        //    return;
        //}
        //object data = xlbook;
        if (xlbook == null)
        {
            return;
        }
        // convert data to byteArray   

        MemoryStream memoryStream = new MemoryStream();
        BinaryFormatter binaryFormatter = new BinaryFormatter();           
       //below line im getting the Exception
        **binaryFormatter.Serialize(memoryStream, xlbook);**            
        byte[] bytes = memoryStream.ToArray();
        memoryStream.Close();
        //get memory pointer
        int cb;
        int* pcb = &cb;
        //save data
        byte[] arrayLen = BitConverter.GetBytes(bytes.Length);
        stream.Write(arrayLen, arrayLen.Length, new IntPtr(pcb));
        stream.Write(bytes, bytes.Length, new IntPtr(pcb));
        //currentDomain.AssemblyResolve -= new ResolveEventHandler(currentDomain_AssemblyResolve);
    }
    catch
    {
    }
}

Microsoft.Office.Interop.Excel.WorkbookClass';在Assembly&#

不能用序列化保存Excel工作簿。必须使用工作簿的save方法保存工作簿。

您说您将类标记为可序列化,但您一定标记错了类。需要标记为可序列化的类是WorkbookClass,并且您不能控制该类。

并非所有内容都适合使用任何特定的序列化引擎进行序列化。由于这个案例涉及COM互操作,所以我特别不感到惊讶。基本上,你不能这样做——你只需要使用常规的保存方法,写入一个文件,然后从文件中加载BLOB。

此外,由于您也使用ASP.NET对此进行了标记,请注意,ASP.NET中不支持Office interop。