Microsoft.Office.Interop.Excel.WorkbookClass «в сборке» Microsoft.Office.Interop.Excel не помечен как сериализуемый - PullRequest
2 голосов
/ 25 января 2012

исключение сериализации: введите «Microsoft.Office.Interop.Excel.WorkbookClass» в сборке «Microsoft.Office.Interop.Excel, версия = 11.0.0.0, Culture = нейтральный, PublicKeyToken = 71e9bce111e9429c» не помечен как сериализуемый.

я получаю вышеуказанное исключение .. вот код

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
    {

    }
}

Ответы [ 2 ]

1 голос
/ 25 января 2012

Вы не можете сохранить книгу Excel с сериализацией.Вы должны сохранить книгу, используя метод Save.

Вы говорите, что пометили класс как сериализуемый, но вы, должно быть, отметили неправильный класс.Класс, который необходимо пометить как сериализуемый, - это WorkbookClass, и вы не можете контролировать этот класс.

0 голосов
/ 25 января 2012

Не все подходит для сериализации с любым конкретным механизмом сериализации. Поскольку этот случай связан с COM-взаимодействием, я особенно не удивлен. По сути, вы не можете этого сделать - вам просто нужно использовать обычные методы сохранения, записать в файл и загрузить BLOB из файла.

Кроме того, поскольку вы пометили это и в ASP.NET, обратите внимание, что взаимодействие с Office не поддерживается в ASP.NET.

...