.Net C#DocX librairy:如何序列化DocX文档?

时间:2017-10-02 11:25:32

标签: c# .net serialization novacode-docx

使用DocX librairy时,我在服务器上生成docx文档,然后下载它。

为此,我需要以字节数组转换我的文档。

为此,我以前将文档保存为这样的物理文件:

---
title: some title
author: some author
date: 'some date'
slug: some-slug
categories:
  - some category
tags:
  - some-tag
output:
  blogdown::html_page:
    toc: true
    number_sections: true
    toc_depth: 2
---

![](/post/img/some_img.png)

但我宁愿不这样做。是否可以序列化此对象以下载它而不保存它?

我已经尝试过了:

// 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();
    }
}

但显然,DocX没有实现ISerializable。

编辑:以下代码无效

return this.ObjectToByteArray(document);

2 个答案:

答案 0 :(得分:1)

试试这个,用我的文档位置替换我的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();
    }

}

答案 1 :(得分:0)

无法通过原始DocX库进行此操作。

这是一个遗憾,因为这个库使用MemoryStream来处理数据。

要解决我的问题,我只需添加一个新的public readonly属性来公开私有的MemoryStream变量,然后我使用了这个简单的代码:

DocX项目中添加的代码:

public MemoryStream DocumentMemoryStream { get { return this.memoryStream; }  } 

我的主要功能代码:

return document.DocumentMemoryStream.ToArray();