如何产生包含JSON结构的文件进行下载?

时间:2019-02-05 22:08:11

标签: c# file download asp.net-core-2.2

我的控制器中有此方法。

public IActionResult Download()
{
  return Json(_context.Users);
}

我注意到它会生成正确的JSON结构,但是它在浏览器中呈现为普通文本。我希望将其下载到客户端计算机。我该怎么办?

我不确定是否应该使我的对象以某种方式流式传输like this,或者是否应该在我的硬盘驱动器上创建文件并将其提供给like this

我找不到像我们在C#中惯用的那样简单直接的东西。因此,我担心这里缺少一个概念。

2 个答案:

答案 0 :(得分:1)

将数据转换为字节,然后将这些字节转换为FileResult。返回FileResult后,浏览器将在显示“文件”时执行其通常的操作,通常会提示用户或下载。

以下示例:

public ActionResult TESTSAVE()
    {
        var data = "YourDataHere";
        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(data);
        var output = new FileContentResult(bytes, "application/octet-stream");
        output.FileDownloadName = "download.txt";

        return output;
    }

在这种情况下,您只需将JSON数据作为字符串即可。

答案 1 :(得分:1)

您可以只将json对象写入流或数组,并使用File方法重载之一。添加方便的Serialize方法

private byte[] Serialize(object value, JsonSerializerSettings jsonSerializerSettings)
{
    var result = JsonConvert.SerializeObject(value, jsonSerializerSettings);

    return Encoding.UTF8.GetBytes(result);
}

并按以下方式使用

public IActionResult Download()
{
    var download = Serialize(_context.Users, new JsonSerializerSettings());

    return File(download , "application/json", "file.json");
}

如果您使用Startup.AddJsonOptions()中设置特殊的json序列化程序设置,则您希望将其用作ASP.NET框架,并在Json方法中使用它们。将MvcJsonOptions注入控制器

IOptions<MvcJsonOptions> _options;

public YourController(IOptions<MvcJsonOptions> options)
{
    _options = options;
}

并将设置传递给方法

public IActionResult Download()
{
    var download = Serialize(_context.Users, _options.Value.SerializerSettings);

    return File(download , "application/json", "file.json");
}