我需要从Azure函数中流式传输JSON而不对对象进行序列化,因为序列化的开销太高了。
代码可以归结为如下所示:
[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对象,并且该对象不会转换为字符串,因此我确定这是可能的。
最佳答案
我想通了,在返回之前需要刷新Stream。正确的代码如下所示:
[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");
}
关于c# - .NET Azure函数-如何从流返回JSON对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53158819/