2014-04-07 11 views
16

Mam ciąg JSON, który otrzymuję z interfejsu API Facebooka, w którym mam węzeł, którego nazwa zmienia się zgodnie z jego treścią, na przykład czasem 45 lub 58 itp. Może to być dowolna liczba. Chcę jego wartość. Jak to zdobyć? przykład:Deserializuj ciąg dynamiczny Json za pomocą Newtonsoft JSON.NET

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

wewnątrz message_tags istnieją dwa węzły 0 i [15], że zmienia się dynamicznie w zależności od ich wartości przesunięcia. Chcę nazwy, typy i identyfikatory wewnątrz tych węzłów.

+3

Nie możesz po prostu powtórzyć parami klucz/wartość tablicy 'message_tags'? Dlaczego musisz wyraźnie odwoływać się do klucza, jeśli nawet nie wiesz, co będzie, gdy dostaniesz je z Facebooka? Gdzie jest kod JSON.Net, którego używasz do parsowania tego JSON? Czy możemy to zobaczyć? Gdzie utknąłeś konkretnie? –

+0

Kiedy to napisałeś, nie mogłem tego zrobić i zastanawiałem się, jak to możliwe. A teraz po 2 latach robiłem to i przechodząc przez to pytanie i myśląc, że to wszystko jest kwestią czasu – Yawar

Odpowiedz

29

Można deserializowania swoją JSON się z ExpandoObject:

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

Które dynamicznie dodaje członków do obiektu w czasie wykonywania, a także umożliwia iteracyjne nad nimi 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)); 
} 

ten sposób można iteruj po numerze obj.message_tags, aby uzyskać poszczególne wiadomości i uzyskać wszystkie ich szczegóły.

+2

W moim przypadku mógłbym nawet pominąć zmienną 'converter'. –

Powiązane problemy