json - 如何在 ASP.Net Core 中将大型 json 对象流式传输到浏览器
问题描述
将大型 json 对象流式传输到浏览器时,防止OutOfMemoryException;在 .Net Framework 中,我能够使用
public static void StreamJsonThenEnd(this HttpResponseBase httpResponse, object data)
{
httpResponse.ContentType = "application/json";
using (StreamWriter writer = new StreamWriter(httpResponse.OutputStream))
using (JsonTextWriter jsonWriter = new JsonTextWriter(writer))
{
JsonSerializer ser = new JsonSerializer();
ser.Serialize(jsonWriter, data);
jsonWriter.Flush();
}
httpResponse.End();
}
但是当我在 .Net Core 上工作时,我尝试了下面的代码,但它给了我同步操作是不允许的。调用 WriteAsync 或将 AllowSynchronousIO 设置为 true
public static void StreamJsonThenEnd(this HttpResponse httpResponse, object data)
{
httpResponse.ContentType = "application/json";
httpResponse.StatusCode = StatusCodes.Status200OK;
using (StreamWriter writer = new StreamWriter(httpResponse.Body))
using (JsonTextWriter jsonWriter = new JsonTextWriter(writer))
{
JsonSerializer ser = new JsonSerializer();
ser.Serialize(jsonWriter, data);
jsonWriter.Flush();
}
}
我也试过
public static async Task StreamJsonThenEnd(this HttpResponse httpResponse, object data)
{
httpResponse.ContentType = "application/json";
httpResponse.StatusCode = StatusCodes.Status200OK;
await System.Text.Json.JsonSerializer.SerializeAsync(httpResponse.Body, data, data.GetType());
}
但它现在抛出响应标头无法修改,因为响应已经开始
如何在 ASP.Net Core 中流式传输我的 json 对象?
解决方案
看起来 Json 实际上并不是我的问题的根本原因,因为在 .Net Core 中它默认已经将流用于 json JsonResultExecutor
推荐阅读
- css - 向容器流体添加填充以确保每个设备从左到右具有相同的空间是否很好
- xamarin.android - 我无法为 xamarin android 项目配置 firebase 分析
- javascript - d3.js如何计算悬停时栏的百分比
- time-complexity - O(N+NM) 可以简化为 O(NM) 吗?
- bash - 使用 -POST 将文件的每一行导入 Elasticsearch
- reactjs - 对装饰器的实验性支持支持错误 VSCODE?
- python-3.x - 如何使用python方法“ImageDataGenerator”并将增强图像保存在变量中?
- html - html电子邮件模板中的动态列表
- java - 如何将具有重复元素的 XML 转换为 Java 对象 (JAXB)
- asp.net-core - 如何将带有表单和模型值(包括图像 URL)的剃刀视图转换为 PDF?