簡體   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