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



仅在非常大的集合上,以下行在服务器级别在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 对象

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

谢谢

对于大量数据,您希望将其流式传输到客户端,这样您就不会尝试将整个事情保存在服务器上的内存中,这就是示例中发生的情况。

这里有一篇关于如何使用 JsonTextWriter 和 JsonSerializer 直接写入响应流的好文章,这将最大限度地减少您的内存占用。

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

最新更新