2017-06-27 54 views
0

我有API含有JSON數據http://bbs.eamobiledirectory.com/Mobile/MobileApi.aspx?Action=SalesProfile&unm=sheila&upass=1234。我想執行登錄檢查,如果有人在輸入中輸入用戶名,用戶名將在用戶名中通過API驗證,然後進行身份驗證。登錄邏輯使用Xamarin形式

我如何使用JSON反序列化來實現這一目標?

編輯

這是怎麼了我正在執行它:

public async void onLogingingIn(object sender, System.EventArgs e) 
{ 


    string Usename = username.Text.ToString(); 
    string Password = password.Text.ToString(); 

    string url = "http://bbs.eamobiledirectory.com/Mobile/MobileApi.aspx?Action=SalesProfile&unm=" + Usename + "a&upass=" + Password; 
    var response = await client.GetStringAsync(url); 
    var todoItems = JsonConvert.DeserializeObject<Login>(response); 
    var Usnmae = todoItems.username; 
    await DisplayAlert("Notification ", "" + Usnmae, "OK"); 

} 

,但我在我的logcat收到此錯誤:

Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'BBSTV.Login' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. 
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array. 
Path '', line 1, position 1. 
+0

對不起,但我投票結束這個問題太廣泛。基本上,我們要求我們無需付出任何努力即可構建應用程序的登錄部分。另外JSON反序列化並不困難,而且已經有很多。請參閱[如何提問](https://stackoverflow.com/help/how-to-ask)頁面來了解如何提出正確的問題。 –

+0

它不是兄弟,只是檢查我的API的邏輯,有一些小我想要一個僞代碼 –

+0

儘管如此,你的一些努力是值得讚賞的。你可以使用[json2csharp](http://json2csharp.com/)輕鬆地爲此創建一個類,並且像使用'RootObject account = JsonConvert.DeserializeObject (json);' –

回答

1

一個類可以方便地與生成Json2Csharp在線工具。在你的情況下產生的類將如下所示:

public class RootObject 
{ 
    public int agentID { get; set; } 
    public string agentNo { get; set; } 
    public string agentName { get; set; } 
    public string agent_phone { get; set; } 
    public string agent_email { get; set; } 
    public DateTime agent_dob { get; set; } 
    public int agent_rating { get; set; } 
    public string username { get; set; } 
} 

你可能想刷新命名,但這應該讓你開始。

現在,您可以輕鬆地檢索任何類的數據,最簡單的就是HttpClient,並從結果數據反序列化該對象。這將類似於:

using (var client = new HttpClient()) 
{ 
    var resultString = await client.GetStringAsync("http://bbs.eamobiledirectory.com/Mobile/MobileApi.aspx?Action=SalesProfile&unm=sheila&upass=1234"); 

    var resultObject = JsonConvert.DeserializeObject<List<RootObject>>(json); 
} 

出於某種原因,你的API輸出對象的集合,注意我如何反序列化到List<RootObject>

+0

Verslus,感謝您的回答,但我已更新我的帖子yake一看,看來,我的方法是類似於你的,但仍然面臨一些問題 –

+0

注意你的鏈接輸出周圍的'[' 。這表明它返回一個集合。我會更新我的答案。 –

+0

好男人非常感謝 –