一种序列化方法会产生“内存不足”错误,而另一种则不会

时间:2019-07-09 22:04:50

标签: c# serialization httpresponsemessage

仅在非常大的集合上,以下行在服务器级别的mscorlib.dll上引发OutofMemroyException

HttpResponseMessage  response;
response.Content= new StringContent(JsonConvert.SerializeObject(results), 
system.Encoding.UTF8, "text/json");

但是以下序列化同一对象的方法不会产生此错误

Var serializer= new System.Web.Script.Serilaization.JavascriptSerializer() 
{MaxJsonLength = int.MaxValue};
response.Content= new StringContent(serializer.Serialize(results), 
system.Encoding.UTF8, "text/json")

但是,使用第二种方法,客户端会抛出错误:

  

由于类型需要一个json对象,因此无法反序列化当前json数组

所以我希望要么用第一种方法解决内存问题,要么找出为什么第二种方法可以像第一种方法一样被反序列化

谢谢

1 个答案:

答案 0 :(得分:-1)

您希望将大量数据流传输到客户端,因此您不会试图将整个内容保存在服务器的内存中,这就是您的示例所发生的情况。

有关如何使用JsonTextWriter和JsonSerializer直接写入响应流的文章,这将减少您的内存占用。

http://www.bizcoder.com/returning-raw-json-content-from-asp-net-web-api