【问题标题】:Microsoft.Office.Interop.Excel.WorkbookClass' in Assembly 'Microsoft.Office.Interop.Excel, is not marked as serializable程序集 'Microsoft.Office.Interop.Excel 中的 Microsoft.Office.Interop.Excel.WorkbookClass' 未标记为可序列化
【发布时间】:2012-01-25 06:45:39
【问题描述】:

序列化异常:程序集“Microsoft.Office.Interop.Excel,版本=11.0.0.0,文化=中性,PublicKeyToken=71e9bce111e9429c”中的类型“Microsoft.Office.Interop.Excel.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
    {

    }
}

【问题讨论】:

  • 我已经用 [serializable] 属性标记了这个类,但是没有运气
  • 如果您需要指针来保存 Excel 文档,那就是出了点问题。

标签: c# asp.net serialization web-config assemblies


【解决方案1】:

您无法使用序列化保存 Excel 工作簿。您必须使用其 Save 方法保存工作簿。

您说您将类标记为可序列化,但您肯定标记了错误的类。需要标记为可序列化的类是 WorkbookClass,您无法控制该类。

【讨论】:

  • 我需要将工作簿保存在内存流中,以便我可以从浏览器下载文件。
  • 将工作簿保存到磁盘,将生成的文件作为 FileStream 打开,然后将其复制到 MemoryStream。或者完全绕过 MemoryStream,将 FileStream 直接复制到 NetworkStream。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2012-04-05
    • 2017-02-21
    • 2015-11-10
    • 2016-01-18
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多