簡體   English   中英

解析json時出現system.nullreferenceException

[英]system.nullreferenceexception when parsing json

我正在嘗試解析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);
            }
    }

User.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-約翰,當我運行應用程序時,我從中間窗口獲取了此信息。

類型'System.NullReferenceException'的第一次機會異常發生在c_Sharp_WP8_Clo_Edu.DLL中。類型'System.NullReferenceException'的異常發生在c_Sharp_WP8_Clo_Edu.DLL中,並且在托管/本地邊界類型'System'之前沒有被處理。在C_Sharp_WP8_Clo_Edu.DLL中發生了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屬性標記要序列化的所有成員。 或者,您可以確保類型是公共的,並且具有無參數的構造函數-然后將對該類型的所有公共成員進行序列化,並且不需要任何屬性。

我覺得這是一個重大的進步,因此,如果需要其他幫助,請告訴我

您的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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM