C# C获取长字符串中出现的所有单词的所有内容

C# C获取长字符串中出现的所有单词的所有内容,c#,json,string,C#,Json,String,我有这个字符串,实际上是JSON格式的 { "key1": val1 "key2": val2 . . . "keyN": { "keyN1": valN1 "keyN2": valN2 "keyN3": { "keyN3-1": valN3-1 "keyN3-2": valN3-2 } } . . . "keyNN": { "keyNN1": valNN1 "keyNN2": v

我有这个字符串,实际上是JSON格式的

{
  "key1": val1
  "key2": val2
  .
  .
  .
  "keyN": {
    "keyN1": valN1
    "keyN2": valN2
    "keyN3": {
      "keyN3-1": valN3-1
      "keyN3-2": valN3-2
    }
  }
  .
  .
  .
  "keyNN": {
    "keyNN1": valNN1
    "keyNN2": valNN2
    "keyNN3": [
        {
          "keyNN3-1": valNN3-1,
          "keyNN3-2": valNN3-2,
          "keyNN3-3": {
            "keyNN3-3-1": valueNN3-3-1,
            "keyNN3-3-2": valueNN3-3-2,
            "keyM": {
              "KeyM1": ValueM1,
              "KeyM2": ValueM2,
              .
              .
              "KeyMN": ValueMN
            }
          }
        },
        .
        .
        .
        {
          "keyNN3-1": valNN3-1,
          "keyNN3-2": valNN3-2,
          "keyNN3-3": {
            "keyNN3-3-1": valueNN3-3-1,
            "keyNN3-3-2": valueNN3-3-2,
            "keyM": {
              "KeyM1": ValueM1,
              "KeyM2": ValueM2,
              .
              .
              "KeyMN": ValueMN
            }
          }
        }
    ]
    }
}
我想得到钥匙的所有内容每次钥匙出现,我的意思是,我想把这个还给你

[
  {
    "KeyM1": ValueM1,
    "KeyM2": ValueM2,
    .
    .
    "KeyMN": ValueMN
  },
  .
  .
  {
    "KeyM1": ValueM1,
    "KeyM2": ValueM2,
    .
    .
    "KeyMN": ValueMN
  }
]

我接收不同格式的字符串,first struct不是唯一的struct,但总是有keyM。在这一刻,我做了一段时间,但效率不高,我想知道是否存在更好的方法。

如果我正确理解您的JSON结构,使用JSON.NET应该可以执行以下操作:

var jObject = JsonConvert.Deserialize<JObject>(jsonText);
var keyMItems = jObject.SelectTokens("keyM");

测试jsonpath的好工具

您能稍微澄清一下您的期望吗?当您说要获取所有内容时,您的意思是要获取包含KeyM*属性的整个JSON对象吗?或者仅仅是具有这些属性的行?或者只是这些属性的值?请在代码中提供您的尝试。谢谢。另外:你能用while循环来分享你用来做这件事的代码吗,并详细说明为什么它没有效率?你的意思是它使用了大量的代码行,还是太长了?如果需要的时间太长,那么您得到的JSON有效负载有多大?如果您将示例更改为更具体,也会更好,例如,我们是否要了解keyM的用法,您希望使用后缀查找键?考虑到你已经收集了keyM1、keyM2、keyM3等等,或者你检查的是一个任意的规则,只需要说这个键是一个有趣的键就可以了吗?很抱歉,这个问题很糟糕,我试图澄清一下,我指的是获取keyM的所有内容、属性和值。作为回报,我想显示keyM对象的键和值。我的意思是速度慢,时间太长。字符串可以是600000个或更多字符。非常感谢,这是我所需要的,我刚刚将它与@striplingwarrior的答案结合在一起,效果非常好。对于您的答案,您的帮助非常有用
Console.WriteLine(new JArray(keyMItems).ToString());
JObject o = JObject.Parse(initialJson);

IEnumerable<JToken> keyMs = o.SelectTokens("$..keyM");