2012-06-18 52 views
3

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

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

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

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

回答

2

事实上,而不是你自己处理的深度,可以通过部分使用JsonTextReader反序列化,这将不超过到底令牌还阅读:

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

所以没有必要提前读自己。