2016-09-29 25 views
1

请我需要帮助,我需要从JSON对象获得下面的用户名和用户ID值我如何获得在Xamarin形式从JSON对象值

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

这是我的代码:

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

但是这个值userid和roleid显示为空。请我如何得到这些值

回答

2

与JSON提供了根据,你必须访问UserIDRoleIDItem.data.UserIDItem.data.RoleID

+0

感谢你的快速反应,其实我正在使用Visual Studio IDE中。 Item.data.RoleID和item.data.UserID中的数据用红色下划线,表示ide无法访问值 – Josconcept

+0

如上所述,您的UserDetails对象声明也必须更改为符合JSON数据,或者您可以使用'dynamic'变量并在运行时访问JSON。 – hellowstone

+0

似乎在xamarin中使用'dynamic'不存在。 – hellowstone

2

为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

要扩大hellowstone的回答是:

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

输出:

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