Создать файл .json виртуально

Есть коллекция которую я сериализую в json в беке

var json = JsonConverter.Serialize(collection);

Была поставлена задача изменить метод так чтобы он возвращал не сериализованную строку с данными внутри а файл .json формата и вернул его таким фронту с именем. Но загвоздка в том что нельзя создавать на беке файл и размещать его где либо, нужно сделать так будто передал реальный файл во фронт, но без его создания. Есть какие то варианты решения задачи? Желательно с примерами реализации.


Ответы (3 шт):

Автор решения: Alexander Petrov
public HttpResponseMessage GetData()
{
    // Помещаем данные в стрим

    using var stream = new MemoryStream();
    using var writer = new StreamWriter(stream);

    var collection = new List<int> { 1, 2, 3 };
    new JsonSerializer().Serialize(writer, collection);

    // Используем стрим

    var content = new StreamContent(stream);

    content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    content.Headers.ContentDisposition.FileName = "data.json";

    content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

    var message = new HttpResponseMessage(HttpStatusCode.OK);
    message.Content = content;

    return message;
}
→ Ссылка
Автор решения: Venen

Помог вот этот вариант решения задачи

var json = JsonConvert.SerializeObject(collection);
byte[] masByte = Encoding.UTF8.GetBytes(json);
return File(masByte, "application/json", $"namefile_{DateTime.Now:MM/dd/yyyy}.json");
→ Ссылка