When stream large json object to browser, to prevent OutOfMemoryException; in .Net Framework, I was able to use
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();
}
But when I worked on .Net Core, I tried below code but it gave me Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead
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();
}
}
I also tried
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());
}
but it now throw The response headers cannot be modified because the response has already started
How can I stream my json object in ASP.Net Core?