.NETC#DocX库:如何序列化DocX文档?
当使用DocX库时,我在服务器上生成DocX文档,然后下载它 为此,我需要将文档转换为字节数组 为此,我以前将文档保存为物理文件,如下所示:.NETC#DocX库:如何序列化DocX文档?,c#,.net,serialization,novacode-docx,C#,.net,Serialization,Novacode Docx,当使用DocX库时,我在服务器上生成DocX文档,然后下载它 为此,我需要将文档转换为字节数组 为此,我以前将文档保存为物理文件,如下所示: // Save all changes to this document. document.SaveAs(GENERATED_DOCX_LOCATION); return System.IO.File.ReadAllBytes(GENERATED_DOCX_LOCATION); 但我宁愿不那样做。是否可以序列化此对象以下载它而不进行物理保存 我已经试
// Save all changes to this document.
document.SaveAs(GENERATED_DOCX_LOCATION);
return System.IO.File.ReadAllBytes(GENERATED_DOCX_LOCATION);
但我宁愿不那样做。是否可以序列化此对象以下载它而不进行物理保存
我已经试过了:
private byte[] ObjectToByteArray(object obj)
{
if (obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, obj);
return ms.ToArray();
}
}
与:
return this.ObjectToByteArray(document);
但显然,DocX没有实现ISerializable
编辑:下面的代码也不起作用
byte[] byteArray = null;
using (var stream = new MemoryStream())
{
document.SaveAs(stream);
byteArray = stream.ToArray();
}
return byteArray;
试试这个,替换我的c:\temp。。。路径和文档位置,这将从字节数组中获取并写入文件
void Main()
{
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\temp\test.csv");
using (var bw = new BinaryWriter(File.Open(@"C:\temp\test2.csv", FileMode.OpenOrCreate)))
{
bw.Write(bytes);
bw.Flush();
}
}
没有办法通过原始的DocX库来实现这一点 这是一个遗憾,因为这个库使用MemoryStream来处理数据 为了解决我的问题,我只添加了一个新的公共只读属性来公开私有MemoryStream变量,然后使用以下简单代码: 在DocX项目中添加的代码:
public MemoryStream DocumentMemoryStream { get { return this.memoryStream; } }
我的主要功能中的代码:
return document.DocumentMemoryStream.ToArray();
这是一个web服务器,是您组织的内部服务器吗?是的,它是一个私有服务器,由一个专门的团队管理。看看这个,这应该能满足您的需要(除非您使用MVC,这将是一个不同的答案,但如果您需要,我可以稍后为您编写一个),但是。。。实际上,这应该可以工作,它不是HTTP服务器。对不起,我应该说得更清楚些。这是一个Windows服务(WCF应用程序),它使用二进制管道传输数据。所以我不认为你的链接可以在这里应用(但我把它保留在收藏夹中,因为我们计划在几个月后在SOAP中迁移)好的,让我试试我这边的一些事情,我会回来谢谢你的考虑,但我不想把文件test2.csv保存在磁盘上。我通过改变DocX库找到了摆脱这种状况的方法,更多细节请参见我的帖子。谢谢这只是一个例子,说明了你可以做你需要做的事情,你不必保存csv文件这不是我需要做的,因为你从一个物理文件的字节[]开始,我有一个DocX开始,在内存中,而不是在磁盘上。