gpt4 book ai didi

C# JSON DeserializeObject,不断获取空引用

转载 作者:行者123 更新时间:2023-11-30 20:53:37 24 4
gpt4 key购买 nike

我知道有很多关于 JSON 的问题遍布整个互联网和 StackOverflow。但是我无法让我的 JSON 正常工作,所以我希望我能在这里得到一些帮助。[使用 C#、Visual Studio]

我有以下代码:

public void CheckRFID(string RFIDtag) {
[...SOME WORKING CODE]
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
System.Diagnostics.Debug.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());

currentuser = Newtonsoft.Json.JsonConvert.DeserializeObject<User[]>(new StreamReader(response.GetResponseStream()).ReadToEnd());
System.Diagnostics.Debug.WriteLine(currentuser[0].UserID);
}

这段代码一直给我“Database.dll 中发生类型为‘System.NullReferenceException’的第一次机会异常。附加信息:未将对象引用设置为对象的实例。”。

如您所见,我正在将响应写入调试日志以查看是否获得 JSON,此调试的结果是 [{"ID":"2","username":"IJK"“性别”:“F”,“颜色”:“黄色”}]。对我来说看起来像是一个合适的 JSON 行。

所以,我被困住了。我不知道去哪里看,我做错了什么......

为了了解更多信息,这是 User.cs 类:

public class User {
public int UserID { get; set; }
public string username { get; set; }
public string gender { get; set; }
public string color { get; set; }
}

最佳答案

StreamReader().ReadToEnd() 调用会将源流 (response.GetResponseStream()) 推进到末尾。因此,在您第二次创建它时,您将得到一个空字符串。这将导致 currentusernull

像这样更改您的代码:

public void CheckRFID(string RFIDtag)
{
[...SOME WORKING CODE]
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string responseString = (new StreamReader(response.GetResponseStream())).ReadToEnd();
System.Diagnostics.Debug.WriteLine(responseString);

currentuser = Newtonsoft.Json.JsonConvert.DeserializeObject<User[]>(responseString);
System.Diagnostics.Debug.WriteLine(currentuser[0].UserID);
}

您还应该期望在您的 UserID 属性中有默认值,因为它的正确名称应该是“ID”(因此它不会被正确绑定(bind))——我建议您更改名称。

关于C# JSON DeserializeObject,不断获取空引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19836181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com