我试图实现一个ActionResult的子类,它将从REST中流出大型JSON对象,我在堆栈溢出上找到了这个解决方案,但它似乎是asp.net MVC的一个实现。
public class JsonStreamingResult : ActionResult
{
private IEnumerable itemsToSerialize;
public JsonStreamingResult(IEnumerable itemsToSerialize)
{
this.itemsToSerialize = itemsToSerialize;
}
public override void ExecuteResult(ActionContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "application/json";
response.ContentEncoding = Encoding.UTF8;
JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(response.OutputStream))
using (JsonTextWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartArray();
foreach (object item in itemsToSerialize)
{
JObject obj = JObject.FromObject(item, serializer);
obj.WriteTo(writer);
writer.Flush();
}
writer.WriteEndArray();
}
}
}但是当我在将它移植到ContentEncoding核心MVC的过程中,我发现响应类没有asp.net和OutputStream属性。
请,有人能提供必要的更改来将这个类移植到asp.net核心吗?
提前谢谢。
发布于 2019-04-11 23:06:26
OutputStream - in ASP.NET Core HttpResponse包含可以写入响应的Body属性。ContentEncoding -设置StreamWriter编码,因为您手动将结果写入响应流。在ASP.NET MVC中,只有在调用HttpResponse.Write方法时才使用HttpResponse.ContentEncoding。
public class JsonStreamingResult : ActionResult
{
private IEnumerable itemsToSerialize;
public JsonStreamingResult(IEnumerable itemsToSerialize)
{
this.itemsToSerialize = itemsToSerialize;
}
public override void ExecuteResult(ActionContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "application/json";
JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(response.Body, Encoding.UTF8))
using (JsonTextWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartArray();
foreach (object item in itemsToSerialize)
{
JObject obj = JObject.FromObject(item, serializer);
obj.WriteTo(writer);
writer.Flush();
}
writer.WriteEndArray();
}
}
}更新
根据源代码的说法,JsonResultExecutor内部所做的正是我所描述的,唯一的区别是它解析了来自ContentType的编码。
https://stackoverflow.com/questions/55631398
复制相似问题