使用Newtonsoft JSON.NET反序列化Dynamic Json字符串

我有一个JSON字符串,我从Facebook API获得,其中我有一个名称根据其内容而变化的节点,例如有些时间它是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],它们根据它们的偏移值动态地改变。 我想要这些节点中的名称,类型和ID。

您可以将JSON反序列化为ExpandoObject :

 var converter = new ExpandoObjectConverter(); dynamic obj = JsonConvert.DeserializeObject(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来获取各个消息,并分别获取它们的所有细节。