C#JSON DeserializeObject,继续获取null引用

时间:2013-11-07 12:37:43

标签: c# json

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

2 个答案:

答案 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,名称不应该相同?