如何生成包含 JSON 结构的下载文件?

Don*_*ana 2 c# file download asp.net-core-2.2

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

public IActionResult Download()
{
  return Json(_context.Users);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ale*_*der 7

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

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

    return Encoding.UTF8.GetBytes(result);
}
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用它

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

    return File(download , "application/json", "file.json");
}
Run Code Online (Sandbox Code Playgroud)

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

IOptions<MvcJsonOptions> _options;

public YourController(IOptions<MvcJsonOptions> options)
{
    _options = options;
}
Run Code Online (Sandbox Code Playgroud)

并将设置传递给方法

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

    return File(download , "application/json", "file.json");
}
Run Code Online (Sandbox Code Playgroud)