【问题标题】:StreamReader object keeps disappearingStreamReader 对象不断消失
【发布时间】:2021-06-21 16:14:01
【问题描述】:

我正在尝试使用.Net Core 3.1 构建一个简单的 twitter HttpClient 和 MySQL 应用程序,但我看到了一个问题,即在我完成处理之前结果对象变为空。处理这个问题的正确方法应该是什么?

示例代码:

using (HttpClient httpClient = new HttpClient())
{

    httpClient.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);

    var requestUri = "https://api.twitter.com/2/tweets/search/stream";
    httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
    var stream = httpClient.GetStreamAsync(requestUri).Result;

    using (var reader = new StreamReader(stream))
    {
        //while (!reader.EndOfStream)
        while (reader.Peek() >= 0) 
        {
            //We are ready to read the stream
            var ResultObject = JsonConvert.DeserializeObject<Tweet>(reader.ReadLine());
            Console.WriteLine(ResultObject);
            if (ResultObject != null) // <== ResultObject disappears after this :: NullReferenceException
            {
                Console.WriteLine(ResultObject);
                string sQuery = $"INSERT INTO MySQLTable (tweet_id,text) VALUES ({ResultObject.data.id},\"{ResultObject.data.text}\");";
                Client.NonQuery(sQuery);
                Console.WriteLine(Client.Query("SELECT * FROM MySQLTable;"));
            };
        }
    }
}
public class Tweet
{
    public TweetData data;
}
public class TweetData
{
    public string id;
    public string text;
}

(这个问题在.Net 5.0没有出现)

【问题讨论】:

  • 尝试将await添加到httpClient.GetStreamAsync(requestUri)并使方法异步docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
  • 你为什么要逐行阅读响应并分别反序列化? JSON 不是基于行的格式。
  • @madreflection Twitter“search/stream”端点似乎由以换行符结尾的字符串组成,除非我错了。 (这纯粹是基于 .net 5.0 结果完美地使用完全相同的代码)
  • @AndrewE 不会添加 await 只是让程序永远挂起,因为我们收到了无穷无尽的流?

标签: c# .net-core nullreferenceexception streamreader


【解决方案1】:

问题出在string sQuery。 我试图在一个空成员上.Select()。当存在对 null 成员的验证时,工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2012-01-12
    • 2023-02-22
    相关资源
    最近更新 更多