2012-01-02 17 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の応答です。私は上記の応答から "ユーザー"のコンテンツを解析できません。 firstNameフィールドとlastNameフィールドの代わりに常に0を返します。助けてください。以下は私のコードです。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(シリアル化)。 –

+0

何を試しましたか?デバッガで実行しましたか? –

+0

0または0要素を戻していますか? – Hammerstein

答えて

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

+0

@Rupesh Guffaが指摘していることは、各FSQCheckIn_Dataには1人のユーザーがいることですそれをpublic FSQCheckIn_UserDataユーザに変更する必要があります。これは動作します。または、jsonをユーザーの戻り値と配列に変更します。 – Hammerstein

+0

@Hammersteinありがとうございます、それは奇跡のように働いていました。 – Rupesh