繁体   English   中英

从 Web 服务反序列化大型 JSON 对象(内存不足)

[英]Deserializing large JSON Objects from Web Service (Out of Memory)

我有一个从 Web 服务反序列化大对象的程序。 在 webservice 调用和 200 之后,代码如下所示。

JsonConvert.DeserializeObject<List<T>>(resp.Content.ReadAsStringAsync().Result).ToList()

有时在运行此过程时,我会得到一个聚合异常,该异常显示内部异常为内存不足。 我无法确定是读取 JSON 数据字符串(可能非常大)还是导致此问题的反序列化过程。 我想做的是分解字符串并从响应中单独拉回每个 JSON 对象,然后对其进行反序列化。 我只是很难找到一种方法来一次只从响应中取出一个 JSON 对象。 任何建议都非常感谢!

HttpClient client = new HttpClient();

using (Stream s = client.GetStreamAsync("http://www.test.com/large.json").Result)
using (StreamReader sr = new StreamReader(s))
using (JsonReader reader = new JsonTextReader(sr))
{
    JsonSerializer serializer = new JsonSerializer();

    // read the json from a stream
    // json size doesn't matter because only a small piece is read at a time from the HTTP request
    Person p = serializer.Deserialize<Person>(reader);
}

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/web-services/rest包含警告:

使用 ReadAsStringAsync 方法检索大型响应可能会对性能产生负面影响。 在这种情况下,应直接反序列化响应以避免必须完全缓冲它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM