Как создать файл для загрузки, содержащий структуру JSON? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть этот метод в моем контроллере.

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

Я заметил, что он генерирует правильную структуру JSON , но он отображается в браузере как обычный текст.Я хочу, чтобы он был загружен на компьютер клиента.Как мне это сделать?

Я не уверен, должен ли мой объект каким-либо образом передавать поток как этот или, возможно, создать файл на моем жестком диске и обслуживать его какthis .

Я не могу найти ничего, что бы показалось мне таким простым и понятным, как мы привыкли в C #.Поэтому я боюсь, что мне здесь не хватает понятия.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы можете просто записать объект 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");
}

Если вы установите специальные настройки сериализатора json в Startup с помощью .AddJsonOptions(), вы хотели бы использовать ихпоскольку ASP.NET framework использует их в методе 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");
}
0 голосов
/ 06 февраля 2019

Преобразуйте данные в байты, затем эти байты в 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 в виде строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...