1

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"}

UPDATE-文字列の1つが正しく設定されていないことに気づきませんでしたが、それでも同じエラーですUPDATE 2-アプリを実行すると、中間ウィンドウからこれを取得します

タイプ'System.NullReferenceException'のファーストチャンス例外がc_Sharp_WP8_Clo_Edu.DLLで発生しましたタイプ'System.NullReferenceException'の例外がc_Sharp_WP8_Clo_Edu.DLLで発生し、管理された/ネイティブ境界の前に処理されませんでしたタイプ'システムのファーストチャンス例外。 NullReferenceException'がc_Sharp_WP8_Clo_Edu.DLLで発生しましたタイプ'System.NullReferenceException'の例外がc_Sharp_WP8_Clo_Edu.DLLで発生し、管理対象/ネイティブ境界の前に処理されませんでした

これも追加後に表示されます

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

c_Sharp_WP8_Clo_Edu.viewinfo.webClient_OpenReadCompleted(オブジェクト送信者、OpenReadCompletedEventArgs e)で

アップデート3-私は見ることができるすべての場所をスキャンしましたが、成功しませんでした。アップデート4-新しいコードを実装したため、電話でこのエラーが発生しました。タイプ「c_sharp_WP8_Clou_Edu.User」はシリアル化できません。DataContractAttribute属性を使用して作成し、シリアル化するすべてのメンバーをSataMemberAttribute属性でマークすることを検討してください。または、型がパブリックであり、パラメーターのないコンストラクターがあることを確認できます。その場合、型のすべてのパブリックメンバーがシリアル化され、属性は要求されません。

これは私が感じる主要な前進ですので、これ以上の助けがあれば私に知らせてください

4

1 に答える 1

0

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);
    }
}
于 2013-02-08T05:10:23.033 に答える