2016-03-24 24 views
0

Bunun için bir yanıt bulmaya çalışıyorum ama yanlış terimleri aramalıyım.C# - Bir JSON iç içe dizi Array değeri alma

Im Windows telefon uygulaması üzerinde çalışıyor ve iç içe geçmiş bir dizi değeri "user.username" ile bir API veri alıyorum

void data_arrived(object sender, DownloadCompleteData e) 
    { 
     String data = e.data; 
     JArray obj = JArray.Parse(data); 
     for (int i = 0; i < obj.Count; i++) 
     { 

      JObject row = JObject.Parse(obj[i].ToString()); 
      var item = new DataList(); 
      item.country = row["title"].ToString() + " (€" + row["price"].ToString() + ") "; 
      item.code = row["price"].ToString(); 
      item.imageURL = row["urlimage"].ToString(); 
      item.votes = row["votes"].ToString(); 
      item.category = row["category"].ToString(); 
      item.username = row["user.username"].ToString(); 
      list.Items.Add(item); 
     } 
    } 

Her şey user.username dışında çalışıyor

Nasıl i do bunu düzgün kullan?

Teşekkür

+0

benzeyecek? –

+0

evet sorun yok http://www.saveme.ie/api/savings/ – ChrisM

+0

Google apis kullanıyor musunuz? Bu onlara çok benziyor. –

cevap

1

Geçerli bir JSON dizesini dinamik bir nesneye dönüştürebilirsiniz. Bu, nokta notasyonunu kullanarak temel nesneye erişmenizi sağlar. Örneğin.

dynamic row = JsonConvert.DeserializeObject (obj[i].ToString()); 

döngü içine Nihai kod bloğu size gerçek json gönderebilir miyim

dynamic row = JsonConvert.DeserializeObject(obj[i].ToString()); 

Console.WriteLine(row.title.ToString() + " (€" + row.price.ToString() + ") "); 
Console.WriteLine(row.price.ToString()); 
Console.WriteLine(row.urlimage.ToString()); 
Console.WriteLine(row.votes.ToString()); 
Console.WriteLine(row.category.ToString()); 
Console.WriteLine(row.user.username.ToString()); 

Console.WriteLine(); 
Console.WriteLine("-----------------------------\n"); 
+0

aracılığıyla. Bu yüzden "JObject satır = JObject.Parse (obj [i] .ToString());" ile "dinamik satır = JsonConvert.DeserializeObject (obj [i] .ToString());" veya "dinamik ekleme" row = JsonConvert.DeserializeObject (obj [i] .ToString()); " zaten neyin var? – ChrisM

+0

nop, değiştirin. Öğe nesnesini, son satır kod satırında önerdiğim şekilde okuyup doldurun. – Saleem

+0

Bkz: Güncel kod – Saleem

0

çünkü bunu başarmak için hayır "kolay" yolu yoktur. C# ayrılmıştır. Ancak, bir sözlük ve koleksiyon başlatıcısı kullanarak oldukça yakın bir şey elde edebilirsiniz. Hala biraz yalıtılmış ve özel bir sınıf oluşturmanızı gerektirmiyor.

var obj = new Dictionary<string, object> 
{ 
    { "user.username", "myvalue" } 
}; 

var json = JsonConvert.SerializeObject(obj); 
//{"user.username":"myvalue"} 
İlgili konular