20

I have a JSON string that I'm getting from Facebook API, in which I have a node whose name changes according to its content, for example some time it is 45, or 58 etc. It could be any number. I want its value. How to get it? Example:

{
"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"
}, 

Inside message_tags there are two nodes [0 and 15] they dynamically changes according to their offset values. I want names, type and ids inside these nodes.

Yawar
  • 1,924
  • 3
  • 29
  • 39
  • 3
    Can't you just iterate over the key/value pairs of the `message_tags` array? Why do you need to reference the key's explicitly, if you don't even know what they're going to be when you get them from Facebook? Where's the JSON.Net code that you're using to parse this JSON? May we see it please? Where are you getting stuck specifically? –  Apr 07 '14 at 07:38
  • When you wrote this I couldn't do that and was thinking how could it be possible. And now after 2 years I used to do this and going through this question and thinking that it is all matter of time – Yawar Jun 29 '16 at 07:10

1 Answers1

36

You can deserialize your JSON into an ExpandoObject:

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

Which dynamically adds members to your object at runtime, and allows you to iterate over them as described in this answer:

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

That way you can iterate over obj.message_tags to get the individual messages, and obtain all their details respectively.

aevitas
  • 3,753
  • 2
  • 28
  • 39