2012-01-02 198 views
1
{ 
    "response":{ 
     "code":200, 
     "message":"OK", 
     "data":[ 
     { 
      "user":{ 
       "id":"564564", 
       "firstName":"XYZ", 
       "lastName":"J.", 
       "photo":"https:\/\/img-s.example.com\/userpix_thumbs\/48935_12545435354.png", 
       "gender":"male", 
       "homeCity":"Algonquin, IL", 
       "contact":{ 

       } 
      }, 
      "lastCheckin":34634543532 
     }, 
     { 
      "user":{ 
       "id":"3254353", 
       "firstName":"PQR", 
       "lastName":"Black", 
       "photo":"https:\/\/img-s.example.com\/userpix_thumbs\/TJZE1FSTWBE5JA11.jpg", 
       "gender":"male", 
       "homeCity":"Chicago, IL", 
       "relationship":"friend", 
       "contact":{ 

       } 
      }, 
      "lastCheckin":3534523422345 
     } 
     ] 
    } 
} 

以上是JSON中的響應。我無法解析上述響應中的「用戶」內容。它始終返回0而不是firstNamelastName字段。請幫忙。以下是我的代碼。JSON中的解析響應

FSQAPIRec_CheckIn_Results g1 = new FSQAPIRec_CheckIn_Results(); 

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 

HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

StreamReader sr = new StreamReader(resp.GetResponseStream()); 
string json = sr.ReadToEnd(); 
sr.Close(); 

g1 = JSONHelper.Deserialise<FSQAPIRec_CheckIn_Results>(json); 

if (g1.response.message == "OK") 
{ 

    List<FSQCheckIn_Data> obj = g1.response.data; 

    for (int i = 0; i < obj.Count(); i++) 
     { 
      List<FSQCheckIn_UserData> obj1 = obj[i].user; 
      for (int j = 0; j < obj1.Count(); j++) 
       lbl_Resent_Chechin.Text += (j + 1) + ") " + obj1[j].firstName + " " + obj1[j].lastName + "<br/><br/>"; 
     } 
} 


public class JSONHelper 
{ 
    public static T Deserialise<T>(string json) 
    { 
     using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
     { 
      var serialiser = new DataContractJsonSerializer(typeof(T)); 
      return (T)serialiser.ReadObject(ms); 
     } 
    } 

    public static string Serialize<T>(T obj) 
    { 
     DataContractJsonSerializer serializer = new  DataContractJsonSerializer(obj.GetType()); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, obj); 
      return Encoding.Default.GetString(ms.ToArray()); 
     } 
    } 



[Serializable] 
[DataContract] 
public class FSQAPIRec_CheckIn_Results 
{ 
    [DataMember] 
    public RecCheckIn_Response response { get; set; } 
} 
[Serializable] 
[DataContract] 
public class RecCheckIn_Response 
{ 
    [DataMember] 
    public string code { get; set; } 
    [DataMember] 
    public string message { get; set; } 
    [DataMember] 
    public List<FSQCheckIn_Data> data { get; set; } 
} 
[Serializable] 
[DataContract] 
public class FSQCheckIn_Data 
{ 
    [DataMember] 
    public List<FSQCheckIn_UserData> user { get; set; } 
} 
[Serializable] 
[DataContract] 
public class FSQCheckIn_UserData 
{ 
    [DataMember] 
    public string firstName { get; set; } 
    [DataMember] 
    public string lastName { get; set; } 
    [DataMember] 
    public string photo { get; set; } 
} 
+2

這可能是不相關的,但它不是很大,你在這裏使用三種不同的編碼 - 尤其是UTF-8(構建一個StreamReader時默認),Encoding.Unicode(在反序列化)和Encoding.Default(在Serialize中)。 – 2012-01-02 13:08:17

+0

你已經試過了什麼?你在調試器中運行嗎? – 2012-01-02 13:09:10

+0

它是否返回0或0個元素。 – Hammerstein 2012-01-02 13:11:12

回答

1

user項目不是一個列表,它是一個單一的對象。

... 
if (g1.response.message == "OK") { 
    List<FSQCheckIn_Data> obj = g1.response.data; 
    for (int i = 0; i < obj.Count(); i++) { 
    FSQCheckIn_UserData obj1 = obj[i].user; 
    lbl_Resent_Chechin.Text += "1) " + obj1.firstName + " " + obj1.lastName + "<br/><br/>"; 
    } 
} 
... 
+0

是的,先生,我已經將它更改爲List obj1,但仍然給我的計數爲0. – Rupesh 2012-01-02 13:20:15

+0

@Rupesh Guffa指出的是每個FSQCheckIn_Data都有一個用戶,您需要將其更改爲公共FSQCheckIn_UserData用戶,它將起作用。或者改變json返回和用戶數組。 – Hammerstein 2012-01-02 13:22:21

+0

@Hammerstein多謝先生,它像奇蹟一樣工作。 – Rupesh 2012-01-02 13:54:48