【问题标题】:system.nullreferenceexception when parsing json解析json时出现system.nullreferenceexception
【发布时间】:2013-01-23 18:12:45
【问题描述】:

我正在尝试解析 JSON 文件,但遇到上述问题 设备显示“对象引用未设置为对象的实例。” 所以我迷路了。

这是我的代码

mypage.xaml.cs

    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        DataContractJsonSerializer ser = null;
        try
        {
            ser = new DataContractJsonSerializer(typeof(ObservableCollection<User>));
            ObservableCollection<User> User = ser.ReadObject(e.Result) as ObservableCollection<User>;
            foreach (User em in User)
            {
                txbName.Text = "Username: " + em.Username;
                txbFirstName.Text = "FirstName:" +em.FirstName;
                txbSurname.Text ="Surname: " +em.Surname ;
                txbEmail.Text = "Email: " + em.Email;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }


    private void btnGetData_Click(object sender, EventArgs e)
    {
        try
            {
                WebClient webClient = new WebClient();
                Uri uri = new Uri("http://beta.cloud-education.cu.cc/api/User/1");
                webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
                webClient.OpenReadAsync(uri);
            }    
        catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
    }

用户.cs

class User
{
    public int id {get; set;}
    public string Username {get; set;}
    public string FirstName {get; set;}
    public string Surname {get;set;}
    public string Email {get;set;}
    public string LiveId { get; set; }
    public int Language { get; set; }
    public int Subjects { get; set; }
}

我只是看不出哪里出错了 uri 是正确的,而 JSON 的输出是

{"Id":1,"Username":"Test1","Firstname":"Fir1","Surname":"Sur1","Email":"Test1@contoso.com","LiveId":"LID1","Language":"1","Subjects":"1"}

更新-我没有意识到其中一个字符串设置不正确但仍然是相同的错误 更新 2 - John 当我运行应用程序时,我从中间窗口得到这个

在 c_Sharp_WP8_Clo_Edu.DLL 中发生了“System.NullReferenceException”类型的第一次机会异常 在 c_Sharp_WP8_Clo_Edu.DLL 中发生了“System.NullReferenceException”类型的异常,并且在托管/本机边界之前未处理 c_Sharp_WP8_Clo_Edu.DLL 中出现“System.NullReferenceException”类型的第一次机会异常 c_Sharp_WP8_Clo_Edu.DLL 中出现“System.NullReferenceException”类型的异常,并且在托管/本机边界之前未处理

在添加之后也会显示

System.NullReferenceException: Object reference not set to an instance of an object.

在 c_Sharp_WP8_Clo_Edu.viewinfo.webClient_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e)

更新 3 - 我扫描了我能看到的所有地方,但没有成功。 更新 4 - 所以我使用了新代码并在手机上收到了这个错误 类型'c_sharp_WP8_Clou_Edu.User'不能被序列化。考虑使用 DataContractAttribute 属性,并使用 SataMemberAttribute 属性标记您想要序列化的所有成员。或者,您可以确保该类型是公共的并且具有无参数构造函数 - 然后该类型的所有公共成员都将被序列化,并且不需要任何属性。

这是一个重大的进步,我觉得有更多帮助,请告诉我

【问题讨论】:

  • 欢迎来到 Stack Overflow!即使在 Windows Phone 上,NullReferenceException 的几乎所有情况都是相同的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。
  • 您是否尝试过在 Visual Studio 中单步执行?这应该可以帮助您确定什么对象为空...
  • spender - 我从一个示例中逐字复制了这个单词,因为我一生中从未接触过 JSON,Nithins - 步进只是在尝试时显示空引用,我可以看到 John - 我会在那里尝试,但它的电话说“对象引用未设置为对象的实例”,这让我感到震惊
  • 对于初学者来说,了解引发异常的确切代码行可能会有所帮助。您可以确定以下两种方法之一: 1. 单步执行调试器中的代码 2. 更改您的 catch (Exception ex) 以转储 Exception stack-trace catch(Exception ex) { System.Diagnostics.Debug.WriteLine(ex ); MessageBox.Show(ex.Message);这将为您提供发生故障的确切代码行 (loc)。这样做并更新帖子,以便我们可以帮助解决特定的故障线。

标签: c# json windows-phone-8 nullreferenceexception


【解决方案1】:

您的 JSON 数据不是一个数组,它是一个单一对象,因此当您尝试反序列化为 ObservableCollection 时,它只会返回 null。试试这个代码

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    DataContractJsonSerializer ser = null;
    try
    {
        ser = new DataContractJsonSerializer(typeof(User));
        var user = ser.ReadObject(e.Result) as User;
        txbName.Text = "Username: " + user.Username;
        txbFirstName.Text = "FirstName:" + user.FirstName;
        txbSurname.Text ="Surname: " + user.Surname;
        txbEmail.Text = "Email: " + user.Email;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

【讨论】:

  • 谢谢康纳,今天晚些时候我会试一试,让大家知道
  • ...他再也没有回来,迷失在 C# 的深处
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 2018-08-11
  • 2018-08-24
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多