2

我知道有很多关于 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; }
}
4

2 回答 2

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”(因此它不会被正确绑定) - 我建议您更改名称。

于 2013-11-07T12:44:54.100 回答
0

JSON响应的第一个字段是ID,不是UserID,名字应该不一样吧?

于 2013-11-07T12:41:11.610 回答