【问题标题】:How can I get a list of keys from Json.NET?如何从 Json.NET 获取密钥列表?
【发布时间】:2011-09-25 05:27:14
【问题描述】:

我正在使用 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);
        }
    }
}

【问题讨论】:

  • 你能给出一个你正在使用的代码示例吗?无论如何尝试像这样 JArray sizes = (JArray)jObject["Keys"];
  • 不幸的是,这没有成功。 object["Keys"] 返回名为“Keys”的键的值

标签: c# json.net


【解决方案1】:

来自Converting a JSON.NET JObject's Properties/Tokens into Dictionary Keys

您可以简单地将JObject 转换为 Dictionary 对象并从 Dictionary 对象中访问方法Keys()

像这样:

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&lt;string, object&gt; 等)。

【讨论】:

    【解决方案2】:
    IList<string> keys = parent.Properties().Select(p => p.Name).ToList();
    

    文档:JObject.Properties

    【讨论】:

    • 从 5.0.8 版本开始删除了吗?因为我无法再获得 JObject 的密钥。
    • @Big AJ:你导入 System.Linq 了吗?它是执行 Select() 查询所必需的,没有它就无法使用。
    • 花了 2 个小时试图弄清楚,直到我找到了这篇文章
    • 经过一番研究,我找到了答案,在 vb.net 中,您将使用以下语法:Dim keys As List(Of String) = parent.Properties().Select(Function(p) p.Name).ToList()
    • 抛出:错误 CS1977:不能使用 lambda 表达式作为动态分派操作的参数,除非先将其转换为委托或表达式树类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多