Microsoft.Office.Interop.Excel.WorkbookClass“汇编”的Microsoft.Office.Interop.Excel,未标记为可序列化 [英] Microsoft.Office.Interop.Excel.WorkbookClass' in Assembly 'Microsoft.Office.Interop.Excel, is not marked as serializable

查看:305
本文介绍了Microsoft.Office.Interop.Excel.WorkbookClass“汇编”的Microsoft.Office.Interop.Excel,未标记为可序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

序列化异常:类型'Microsoft.Office.Interop.Excel.WorkbookClass'在大会'的Microsoft.Office.Interop.Excel,版本= 11.0.0.0,文化=中性公钥= 71e9bce111e9429c'未标记为可序列<。 / p>

我收到上述exception..here是code

 不安全的公共无效保存(的IStream流,布尔clearDirty,Excel.Workbook xlbook)
{
    尝试
    {
        //如果(流== NULL)
        // {
        //返回;
        //}
        //对象数据= xlbook;
        如果(xlbook == NULL)
        {
            返回;
        }
        //转换数据的字节数组
        MemoryStream的MemoryStream的=新的MemoryStream();
        BinaryFormatter的BinaryFormatter的=新的BinaryFormatter();       //下面一行即时得到异常
        ** binaryFormatter.Serialize(MemoryStream的,xlbook)**
        字节[]字节= memoryStream.ToArray();
        memoryStream.Close();
        //获取内存指针
        INT CB;
        为int * PCB =安培; CB;
        //保存数据
        字节[] = arrayLen BitConverter.GetBytes(bytes.Length);
        stream.Write(arrayLen,arrayLen.Length,新的IntPtr(PCB));
        stream.Write(字节,bytes.Length,新的IntPtr(PCB));
        //currentDomain.AssemblyResolve - =新ResolveEventHandler(currentDomain_AssemblyResolve);
    }
    抓住
    {    }
}


解决方案

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

您说您标记的类序列化的,但你必须标错类。被标记为需要的类序列化是WorkbookClass,你没有对这个类的控制。

serialization exception:Type 'Microsoft.Office.Interop.Excel.WorkbookClass' in Assembly 'Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' is not marked as serializable.

i am getting the above exception..here is the code

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
    {

    }
}

解决方案

You can't save an Excel workbook with serialization. You must save the workbook using its Save method.

You say you marked the class as serializable, but you must have marked the wrong class. The class that needs to be marked serializable is the WorkbookClass, and you don't have control over that class.

这篇关于Microsoft.Office.Interop.Excel.WorkbookClass“汇编”的Microsoft.Office.Interop.Excel,未标记为可序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆