2017-06-27 7 views
0

Ich habe eine API mit JSON-Daten http://bbs.eamobiledirectory.com/Mobile/MobileApi.aspx?Action=SalesProfile&unm=sheila&upass=1234. Ich möchte eine Login-Prüfung durchführen, bei der, wenn jemand den Benutzernamen in den Eintrag eingibt, der Benutzername durch den Benutzernamen in der API verifiziert wird, dann erfolgt eine Authentifizierung.Login Logic mit Xamarin Forms

Wie kann ich JSON-Deserialisierung verwenden, um dies zu erreichen?

EDIT

Dies ist, wie ich es war die Umsetzung:

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"); 

} 

Aber ich immer diese Fehler in meinem 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

Es tut mir leid, aber ich stimme diese Frage als zu breit zu schließen. Sie bitten uns im Grunde, den Login-Teil Ihrer App ohne jeglichen Aufwand zu erstellen. Auch JSON-Deserialisierung ist nicht so schwer und es ist schon viel da draußen. Bitte lesen Sie die Seite [how to ask] (https://stackoverflow.com/help/how-to-ask), um zu erfahren, wie Sie eine richtige Frage stellen können. –

+0

Es ist nicht breit Bruder, nur überprüfen Sie die Logik meiner API, es ist etwas klein, ich möchte wie ein Pseudocode –

+0

Noch ein wenig Aufwand auf Ihrer Seite ist willkommen. Sie können einfach eine Klasse dafür mit [json2csharp] (http://json2csharp.com/) erstellen und sie einfach wie 'RootObject account = JsonConvert.DeserializeObject (json);' –

Antwort

1

A-Klasse mit dem leicht erzeugt werden Json2Csharp Online-Tool. Die sich ergebende Klasse in Ihrem Fall wird wie folgt aussehen:

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

Sie wahrscheinlich die Namensgebung auffrischen wollen, aber das sollte Ihnen den Einstieg.

Sie können jetzt die Daten einfach mit der gewünschten Klasse abrufen, am einfachsten wäre die HttpClient, und dieses Objekt aus den resultierenden Daten deserialisieren. Dies wird ähnlich aussehen wie:

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

Aus irgendeinem Grund Ihre API eine Sammlung von Objekten gibt, merken, wie ich es zu einem List<RootObject> deserialisieren.

+0

Verslus, danke für die Antwort, aber ich habe meine Post yake ein Blick und sehen, es scheint, meine Vorgehensweise ist ähnlich wie Ihre, aber immer noch einige Probleme –

+0

Beachten Sie die '[' Zeichen um die Ausgabe in Ihrem Link . Dies zeigt an, dass eine Sammlung zurückgegeben wird. Ich werde meine Antwort aktualisieren. –

+0

Ok Mann Vielen Dank –