我知道有很多关于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","gender":"F","color":"yellow"}]
。对我来说看起来像是一条合适的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; }
}
答案 0 :(得分:4)
StreamReader().ReadToEnd()
调用会将源流(response.GetResponseStream()
)推进到最后。因为第二次创建它,你将得到一个空字符串。这将导致currentuser
成为null
。
更改您的代码:
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”(因此它不会被正确绑定) - 我建议您更改名称。
答案 1 :(得分:0)
JSON响应的第一个字段是ID,而不是UserID,名称不应该相同?