首页 > 解决方案 > 如何生成包含 JSON 结构的文件以供下载?

问题描述

我的控制器中有这个方法。

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

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

我不确定是否应该让我的对象像这样以某种方式流式传输,或者可能在我的硬盘驱动器上创建一个文件并像这样提供它。

我找不到任何让我印象深刻的东西,就像我们在 C# 中习惯的那样简单明了。所以我担心我在这里遗漏了一个概念。

标签: c#filedownloadasp.net-core-2.2

解决方案


您可以将 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如果您在using中设置了特殊的 json 序列化程序设置,.AddJsonOptions()您希望将它们用作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");
}

推荐阅读