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

时间:2014-01-16 00:23:20

标签: c# json

我有一个程序可以从Web服务反序列化大对象。在webservice调用和200之后,代码看起来像这样。

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

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

1 个答案:

答案 0 :(得分:4)

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);
}