推特流式处理 API 的 json.net 和增量处理



我正在尝试以增量方式利用 Twitter 流 API 逐个处理根对象,并通过回调异步返回每个根对象。我已经看到实现计算 { vs } 的数量并等待数字在 0 处平衡然后处理该块数据,尽管对我来说这真的感觉不安全。

我的计划是利用 json.net JsonTextReader并使用TokenType和Depth来完成这项工作。这运行良好,因为它是在每个对象末尾拆分读取的非常可靠的方法,我只是无法弄清楚如何将该数据放入反序列化方法。反序列化方法确实接受 JsonTextReader 作为参数,但它从那一点开始处理(毕竟它是一个只向前的流),所以我被卡住了。还有一个 反序列化对象异步方法可用,但只接受字符串。

var jsonSerializer = new JsonSerializer();
using (StreamReader reader = new StreamReader(_response.GetResponseStream()))
{
    using (var jsonReader = new JsonTextReader(reader))
    {
        while (jsonReader.Read())
        {
            if (jsonReader.Depth == 0 && jsonReader.TokenType == JsonToken.EndObject)
            {
                //newTweetCallback(jsonSerializer.Deserialize<Tweet>([Some magic here. Help!]));
            }
        }
    }
}

我希望我只是因为盯着特定应用程序太久而错过了一些明显的东西。

实际上,您可以传递部分使用的 JsonTextReader 进行反序列化,而不是自己处理深度,这不会比结束标记更进一步读取:

while (jsonReader.Read())
{
    if (jsonReader.TokenType == JsonToken.StartObject)
    {
        newTweetCallback(jsonSerializer.Deserialize<Tweet>(jsonReader));
        // Debug.Assert(jsonReader.TokenType == JsonToken.EndObject);
    }
}

因此,没有必要自己提前阅读。

相关内容

  • 没有找到相关文章

最新更新