.NET Azure Function - Как вернуть объект JSON из потока? - PullRequest
0 голосов
/ 05 ноября 2018

Мне нужно вывести JSON из функции Azure без сериализации объекта, поскольку издержки сериализации слишком дороги. Код сводится к следующему:

[FunctionName("AzureFunction")]
public static async Task<IActionResult> 
Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/function")], HttpRequest req, ILogger log)
{
    MemoryStream outputStream = new MemoryStream();
    StreamWriter writer = new StreamWriter(outputStream);
    JsonWriter jsonWriter = new JsonTextWriter(writer);

    jsonWriter.WriteStartObject();
    jsonWriter.WritePropertyName("Property");
    jsonWriter.WriteValue("Value");
    jsonWriter.WriteEndObject();

    outputStream.Seek(0, SeekOrigin.Begin);
    return new FileStreamResult(outputStream, "application/json");
}

Однако этот JSON преобразуется в строку перед тем, как в какой-то момент попасть в провод. Мне удалось передать поток из другого HTTP-вызова напрямую через объект FileStreamResult, и он не преобразуется в строку, поэтому я уверен, что это возможно.

1 Ответ

0 голосов
/ 05 ноября 2018

Я понял, что поток должен быть очищен перед возвратом. Правильный код выглядит так:

[FunctionName("AzureFunction")]
public static async Task<IActionResult> 
Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/function")], HttpRequest req, ILogger log)
{
    MemoryStream outputStream = new MemoryStream();
    StreamWriter writer = new StreamWriter(outputStream);
    JsonWriter jsonWriter = new JsonTextWriter(writer);

    jsonWriter.WriteStartObject();
    jsonWriter.WritePropertyName("Property");
    jsonWriter.WriteValue("Value");
    jsonWriter.WriteEndObject();

    jsonWriter.Flush(); // Flush the json before returning.
    outputStream.Seek(0, SeekOrigin.Begin);
    return new FileStreamResult(outputStream, "application/json");
}
...