本文介绍了使用 Newtonsoft JSON.NET 反序列化动态 Json 字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个从 Facebook API 获取的 JSON 字符串,其中我有一个节点,其名称根据其内容而变化,例如有时是 45 或 58 等.它可以是任何数字.我想要它的价值.如何获得?示例:

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

在 message_tags 中有两个节点 [0 和 15],它们根据偏移值动态变化.我想要这些节点中的名称、类型和 ID.

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.

推荐答案

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

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));
}

这样您就可以遍历 obj.message_tags 以获取各个消息,并分别获取它们的所有详细信息.

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

这篇关于使用 Newtonsoft JSON.NET 反序列化动态 Json 字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 20:47