我正在开发一些代码,该代码将读取Mailchimp的Export API返回的大型json有效负载。
var response = caller.PostAsync(endpoint, data).Result;
var exportedData = response.Content.ReadAsStringAsync().Result;
我当前正在使用Visual Studio 2017调试器尝试查看响应,但我不断收到错误消息:
由于没有足够的可用内存而无法获取局部变量或参数的值。
我最终希望从此json数据的每个“行”中提取信息并对其进行操作。我该怎么做才能查看这些数据而不会耗尽内存?
答案 0 :(得分:2)
处理大型JSON文件的一般方法:
我将从避免尝试解码为字符串开始。相反,请按照in my answer here所述获取响应的内容流,以避免在尝试之前将整个流下载到内存中。
现在您可以:
var stream = await response.Content.ReadAsStreamAsync();
抢夺Stream
而不是string
。
现在,您可以根据信息here将流直接输入到反序列化器中:
using (StreamReader sr = new StreamReader(stream))
using (JsonReader reader = new JsonTextReader(sr))
{
JsonSerializer serializer = new JsonSerializer();
var o = serializer.Deserialize<SomeClassMatchingTheJsonSchema>(reader);
}
如果您仍然对内存感到窒息,则可能需要考虑使用JsonTextReader
答案 1 :(得分:0)
尝试
var exportedData = await response.Content.ReadAsAsync<model>();
还要确保您的方法是异步的
public async Task<returntype> MethodName()
在ReadAsAsync中,让“模型”成为您要映射数据到的对象模型的名称,并让“返回类型”(在方法名称中的Task旁边)成为您的方法要返回的任何数据类型>
您能否更新您的问题并显示整个方法。我想仔细看看