Deserialize Динамическая строка Json с использованием Newtonsoft JSON.NET
У меня есть строка JSON, которую я получаю от Facebook API, в которой у меня есть node, имя которого изменяется в соответствии с его содержимым, например, некоторое время - 45 или 58 и т.д.
Это может быть любое число.
Я хочу его ценность. Как его получить?
Пример:
{
"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"
},
Внутри message_tags есть два узла [0 и 15], они динамически изменяются в соответствии со значениями смещения. Я хочу, чтобы имена, типы и идентификаторы внутри этих узлов.
Ответы
Ответ 1
Вы можете десериализовать свой JSON в ExpandoObject:
var converter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, converter);
Что динамически добавляет участников к вашему объекту во время выполнения и позволяет вам перебирать их как описано в этом ответе:
foreach (var prop in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
Console.WriteLine("Name: {0}, Value: {1}",prop.Name, prop.GetValue(obj,null));
}
Таким образом, вы можете перебирать obj.message_tags
для получения отдельных сообщений и получать все их данные соответственно.