【发布时间】:2012-01-25 07:10:25
【问题描述】:
这是示例代码...但我得到了 serializationException。
xlbook 是对象,我想将此对象保存到 memorystream。
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();
//AppDomain currentDomain = AppDomain.CurrentDomain;
//currentDomain.AssemblyResolve += new ResolveEventHandler(currentDomain_AssemblyResolve);
//here im getting 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, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”中的类型“Microsoft.Office.Interop.Excel.WorkbookClass”未标记为可序列化。
【问题讨论】:
-
如果您想向问题添加信息,您应该编辑原始问题,而不是提出新问题。
-
@ani,看看你在stackoverflow上提出的其他问题,现在你应该清楚几点,1)不要在asp.net中使用office COM。 2)如果你坚持,你不能避免使用临时文件。 3) 考虑使用 xml+xslt 来提供 xlsx 文件,这可以在没有临时文件的情况下完成。 4) 不,你真的不能序列化 COM 对象,即使你愿意,这也永远不会是一个有效的 .xls(x) 文件。
-
我必须重申 @CaptainCoder 所说的:不要在 ASP.NET 或任何其他服务器应用程序中使用 Office 自动化。它不是为它设计的,它不能正常工作,它会以难以诊断的方式中断,不受支持,甚至可能违反你与 Microsoft 的许可协议,除非每个使用该网站功能的人都拥有 Office自己的执照。 只是不要这样做
标签: c# asp.net assemblies memorystream object-serialization