C# .NET Azure函数-如何从流返回JSON对象?

C# .NET Azure函数-如何从流返回JSON对象?,c#,json,azure,json.net,azure-functions,C#,Json,Azure,Json.net,Azure Functions,我需要在不序列化对象的情况下从Azure函数中导出JSON,因为序列化开销太大。 代码可以归结为如下内容: [FunctionName("AzureFunction")] public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/function")], HttpRequest req, ILogger log) { Me

我需要在不序列化对象的情况下从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");
}
[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");
}
[FunctionName(“AzureFunction”)]
公共静态异步任务
运行([HttpTrigger(AuthorizationLevel.Anonymous,“get”,Route=“v1/function”)],HttpRequest请求,ILogger日志)
{
MemoryStream outputStream=新的MemoryStream();
StreamWriter writer=新的StreamWriter(outputStream);
JsonWriter JsonWriter=新的JsonTextWriter(writer);
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName(“属性”);
jsonWriter.WriteValue(“值”);
jsonWriter.WriteEndObject();
outputStream.Seek(0,SeekOrigin.Begin);
返回新的FileStreamResult(outputStream,“application/json”);
}

然而,这个JSON在某种程度上被转换成一个字符串。我已经能够将来自另一个HTTP调用的流直接传递到FileStreamResult对象,而该对象不会转换为字符串,因此我确信这是可能的。

我发现,流在返回之前需要刷新。正确的代码如下所示:

[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");
}
[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");
}
[FunctionName(“AzureFunction”)]
公共静态异步任务
运行([HttpTrigger(AuthorizationLevel.Anonymous,“get”,Route=“v1/function”)],HttpRequest请求,ILogger日志)
{
MemoryStream outputStream=新的MemoryStream();
StreamWriter writer=新的StreamWriter(outputStream);
JsonWriter JsonWriter=新的JsonTextWriter(writer);
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName(“属性”);
jsonWriter.WriteValue(“值”);
jsonWriter.WriteEndObject();
jsonWriter.Flush();//返回前刷新json。
outputStream.Seek(0,SeekOrigin.Begin);
返回新的FileStreamResult(outputStream,“application/json”);
}

“然而,这个JSON在某个点上连接之前被转换成字符串。”你怎么知道?调用它的客户端收到了一个字符串,经过进一步检查,这是因为对象没有完全包含结束标记,因为它没有被刷新。