在Json中查找具有特定键的字段

时间:2013-06-10 06:19:21

标签: c# json json.net

在我的c#项目中,我使用Json.net Library。 我有很长的Json有很多子场,例如:

{
"count": 10,
"Foo1": [
    {
        "id": "1",
        "name": "Name1"
    },
    {
        "id": "2",
        "name": "Name3"
    },
    {
        "id": "3",
        "name": "Name4"
    }
],
"Foo2": [
    {
        "id": "4",
        "name": "Name3",
        "specific_field": "specific_values1"
    },
    {
        "id": "5",
        "name": "Name3",
        "specific_field": "specific_values2"
    },
    {
        "id": "6",
        "name": "Name3",
        "specific_field": "specific_values3"
    }
],
"Foo3": [
    {
        "id": "7"
    },
    {
        "id": "8"
    },
    {
        "id": "9"
    }
]
}

我需要获取所有specific_field的列表(ID为4-6),但无法将json反序列化为对象,因为Foo1Foo2 ...已动态更改。


我想知道,当我只有json时,这可能会获得specific_field的值吗?

我想,我找到了解决方案:

            var list = new List<string>();
            var result = ((JToken)json);
            foreach (var res in result)
            {  
                    list.AddRange(from foo in res.First let ret = foo["specific_field"] where (dynamic) ret != null select foo["specific_field"].ToString());
            }

在评论中,提供,您如何看待它?

1 个答案:

答案 0 :(得分:5)

你可以使用动态:

string json = "your JSON string comes here";
dynamic deserializedValue = JsonConvert.DeserializeObject(json);
var values = deserializedValue["Foo2"];
for (int i = 0; i < values.Count; i++)
{
    Console.WriteLine(values[i]["specific_field"]);
}