2014-04-07 27 views
16

Facebook API'sinden aldığım bir JSON dizgim var. İçinde içeriğine göre bir adı olan bir düğüme sahibim, örneğin bir süre 45 veya 58 Herhangi bir sayı olabilir. Değerini istiyorum. Nasıl alınır? Örnek:Dinamik Json dizgisini Newtonsoft JSON.NET kullanarak deserialize edin

{ 
"data": [ 
{ 
    "id": "1492292372_10201810786059989", 
    "created_time": "2014-04-05T09:00:54+0000" 
}, 
{ 
    "id": "1492292372_10201804679827337", 
    "created_time": "2014-04-04T07:29:07+0000" 
}, 
{ 
    "id": "1492292372_10201804649306574", 
    "created_time": "2014-04-04T07:10:33+0000" 
}, 
{ 
    "id": "1492292372_10201801316823264", 
    "created_time": "2014-04-03T18:31:50+0000" 
}, 
{ 
    "id": "1492292372_10201798962284402", 
    "created_time": "2014-04-03T06:24:47+0000" 
}, 
{ 
    "message_tags": { 
    "0": [ 
     { 
     "id": "1492292372", 
     "name": "Yawar Sohail", 
     "type": "user", 
     "offset": 0, 
     "length": 12 
     } 
    ], 
    "15": [ 
     { 
     "id": "1489845168", 
     "name": "Zeeshan Anjum", 
     "type": "user", 
     "offset": 15, 
     "length": 13 
     } 
    ] 
    }, 
    "id": "1492292372_10201796274777216", 
    "created_time": "2014-04-02T17:57:05+0000" 
}, 
{ 
    "id": "1492292372_10201794080482360", 
    "created_time": "2014-04-02T07:26:23+0000" 
}, 

içinde message_tags iki düğüm [0 ve 15] dinamik olarak offset değerlerine göre değişiklikler vardır. Bu düğümlerin içinde isimler, yazımlar ve kimlikler istiyorum.

+3

Sadece "message_tags" dizisinin anahtar/değer çiftlerini yineleyemez misiniz? Facebook'tan aldığınızda ne olacağını bilemezseniz, anahtarın açık bir şekilde neden referans alınmasına ihtiyaç duyuyorsunuz? Bu JSON'u ayrıştırmak için kullandığınız JSON.Net kodu nerede? Görebilir miyiz lütfen? Özellikle nereye takılıyorsun? –

+0

Bunu yazdığınızda bunu yapamadım ve bunun nasıl mümkün olabileceğini düşünüyordum. Ve şimdi 2 yıl sonra bunu yapmak ve bu soruyu ele alıp her şeyin zamanın – Yawar

cevap

29

Bir ExpandoObject içine JSON serisini:

foreach (var prop in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) 
{ 
    Console.WriteLine("Name: {0}, Value: {1}",prop.Name, prop.GetValue(obj,null)); 
} 

yapabilirsiniz Bu şekilde: çalışma zamanında dinamik olarak sizin nesneye üyelerini ekler ve as described in this answer üzerlerinden yinelemenizi sağlar

var converter = new ExpandoObjectConverter(); 
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, converter); 

Tek tek mesajları almak ve sırasıyla tüm ayrıntılarını almak için obj.message_tags üzerinden yineleyin.

+2

olduğunu düşünürdüm. Benim durumumda 'dönüştürücü' değişkenini bile atlatabiliyordum. –

İlgili konular