如何读取较大响应的JSON有效负载?

时间:2019-05-31 16:42:02

标签: c# json mailchimp dotnet-httpclient

我正在开发一些代码,该代码将读取Mailchimp的Export API返回的大型json有效负载。

        var response = caller.PostAsync(endpoint, data).Result;

        var exportedData = response.Content.ReadAsStringAsync().Result;

我当前正在使用Visual Studio 2017调试器尝试查看响应,但我不断收到错误消息:

由于没有足够的可用内存而无法获取局部变量或参数的值。

我最终希望从此json数据的每个“行”中提取信息并对其进行操作。我该怎么做才能查看这些数据而不会耗尽内存?

2 个答案:

答案 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旁边)成为您的方法要返回的任何数据类型

您能否更新您的问题并显示整个方法。我想仔细看看