如何从Json.NET获取密钥列表?


72

我正在使用C#和Json.NET。如果我有一个JObject,我想要一个对象内的键的列表,类似于如何object.Keys()返回对象内的键。这似乎很明显,但是我很难找到一种方法来做到这一点。

编辑: 我正在遍历该对象,并且我想在通过时吐出该对象中的所有键。我意识到此示例将导致多次看到相同的键,这对于我的需求来说是可以的。

public void SomeMethod(JObject parent) {
    foreach (JObject child in parent.Children()) {
        if (child.HasValues) {
        //
        // Code to get the keys here
        //
        SomeMethod(child);
        }
    }
}

您能否举一个正在使用的代码示例?无论如何,请尝试这样的JArraySize =(JArray)jObject [“ Keys”];
sll

1
不幸的是,这并不成功。object["Keys"]返回名称为“ Keys”的键的值
John

Answers:


146
IList<string> keys = parent.Properties().Select(p => p.Name).ToList();

文档:JObject.Properties


从5.0.8版本开始,是否已将其删除?因为我无法再获取JObject的键。
2013年

3
@Big AJ:您导入了System.Linq吗?必须执行Select()查询,否则将无法使用它。
Wolfgang Schreurs

3
花了2个小时试图弄清楚,直到找到这篇文章为止
reza 2014年

2
经过研究后,我在vb.net中找到了答案,您将使用以下语法: Dim keys As List(Of String) = parent.Properties().Select(Function(p) p.Name).ToList()
JohnRDOrazio

1
抛出:错误CS1977:在未首先将其转换为委托或表达式树类型之前,不能将lambda表达式用作动态调度的操作的参数。
ljgww

21

将JSON.NET JObject的属性/令牌转换为字典键

您可以简单地将转换JObject为Dictionary对象,然后Keys()从Dictionary对象访问方法。

像这样:

using Newtonsoft.Json.Linq;
//jsonString is your JSON-formatted string
JObject jsonObj = JObject.Parse(jsonString);
Dictionary<string, string> dictObj = jsonObj.ToObject<Dictionary<string, string>>();

现在,您可以通过dictObj.Keys()方法访问这些键。您还可以通过执行查看密钥是否存在dictObj.ContainsKey(keyName)

显然,您可以根据需要设置字典的格式(可以是Dictionary<string, object>,等等)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.