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

Joh*_*ohn 58 c# json.net

我正在使用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*ing 129

IList<string> keys = parent.Properties().Select(p => p.Name).ToList();
Run Code Online (Sandbox Code Playgroud)

文档:JObject.Properties

  • @Big AJ:你导入了System.Linq吗?它需要执行Select()查询,没有它就不可用. (3认同)
  • 花了2个小时试图弄明白,直到我找到这篇文章 (3认同)
  • 经过一些研究我找到了答案,在vb.net中你会使用这种语法:```Dim keys As List(Of String)= parent.Properties().选择(Function(p)p.Name).ToList() ``` (2认同)
  • 抛出:错误 CS1977:如果不先将 lambda 表达式转换为委托或表达式树类型,则无法将其用作动态分派操作的参数。 (2认同)

Bla*_*g23 18

将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>>();
Run Code Online (Sandbox Code Playgroud)

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

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