2016-09-29 5 views
1

Bitte ich brauche Hilfe, ich brauche unten um Werte für Benutzer-ID und Benutzer-ID aus dem JSON-ObjektWie erhalte ich Werte von Json Objekt in Xamarin Formular

{"data":{"UserID":"MS100000041","RoleID":5}} 

Dies ist mein Code:

public class UserDetails 
{ 
    public string UserID { get; set; } 
    public int RoleID { get; set; } 
} 

public async Task Login(string url) 
{ 
    try 
    { 
     var uri = new Uri(url); 
     HttpClient myClient = new HttpClient(); 

     var response = await myClient.GetAsync(uri); 
     if (response.IsSuccessStatusCode) 
     { 
      var content = await response.Content.ReadAsStringAsync(); 
      var Item = JsonConvert.DeserializeObject<UserDetails>(content); 
      string userid = Item.UserID; 

      int roleid= Item.RoleID; 
     } 
     else 
     { 
      Application.Current.Properties["response"] = response; 
     } 

    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex); 
    } 
} 

Aber dieser Wert Benutzerid und RoleID zeigen Null. Bitte wie bekomme ich diesen Wert

Antwort

2

Laut mit der JSON zur Verfügung gestellt, müssen Sie UserID zugreifen und RoleID wie Item.data.UserID und Item.data.RoleID

+0

Danke für die Ihre schnelle Antwort, ich bin eigentlich mit Visual Studio-IDE. Die Daten in Item.data.RoleID und item.data.UserID sind mit rot unterstrichen, was bedeutet, dass die ID nicht auf die Werte zugreifen kann. – Josconcept

+0

Wie oben erwähnt, muss auch Ihre 'UserDetails'-Objektdeklaration geändert werden, um dem JSON zu entsprechen Daten, oder Sie können 'dynamische' Variable und Zugriff auf JSON in Runtime verwenden. – hellowstone

+0

Es scheint, dass die Verwendung von 'dynamischen' in Xamarin nicht existiert. – hellowstone

2

als hellowstone

[TestClass] 
public class Test2 
{ 
    [TestMethod] 
    public void Test() 
    { 
     var item = JsonConvert 
      .DeserializeObject<Payload>("{\"data\":{\"UserID\":\"MS100000041\",\"RoleID\":5}}") 
      .data; 
     Assert.AreEqual(item.RoleID, 5); 
     Assert.AreEqual(item.UserID, "MS100000041"); 
    } 
    class Payload 
    { 
     public UserDetails data { get; set; } 
    } 
    class UserDetails 
    { 
     public int RoleID { get; set; } 
     public string UserID { get; set; } 
    } 
} 
2

auf Antwort des hellowstone zu erweitern wies darauf hin:

void Main() 
{ 
    var content = @"{""data"":{""UserID"":""MS100000041"",""RoleID"":5}}"; 
    var Item = JsonConvert.DeserializeObject<UserDetails>(content); 
    Console.WriteLine(Item.data.UserID); 
    Console.WriteLine(Item.data.RoleID); 
} 

public class UserDetails 
{ 
    public class Data 
    { 
     public string UserID { get; set; } 
     public int RoleID { get; set; } 
    } 
    public Data data { get; set; } 
} 

Ausgabe ist:

MS100000041 
5 
0
using Newtonsoft.Json; 


      public async Task Login(string url) 
      { 
      List<UserDetails> ud = new List<UserDetails>(); 
       try 
       { 
        var uri = new Uri(url); 
        HttpClient myClient = new HttpClient(); 

        var response = await myClient.GetAsync(uri); 
        if (response.IsSuccessStatusCode) 
        { 
         var content = await response.Content.ReadAsStringAsync(); 
         JObject results = JObject.Parse (content); 

         var results2 = results ["data"]; 

           foreach (var i in results2) { 
           ud.Add (new UserDetails() { 
            UserID = i["UserID"].ToString(); 
            RoleID = int.Parse(i["RoleID"].ToString()); 
           }); 
           } 
        } 
        else 
        { 
         Application.Current.Properties["response"] = response; 
        } 

       } 
       catch (Exception ex) 
       { 
        Debug.WriteLine(ex); 
       } 
      } 
Verwandte Themen