C# 使用JSON.NET通过字符串从JSON获取密钥

C# 使用JSON.NET通过字符串从JSON获取密钥,c#,json,.net,C#,Json,.net,我需要能够使用JSON.NET从JSON获取数据 { "labels": { "start" : { "action" : "ASK", "message" : "What do you want to do, {name}?", "responses" : { "kill"

我需要能够使用JSON.NET从JSON获取数据

{
  "labels": {
    "start" : {
      "action" : "ASK",
      "message" : "What do you want to do, {name}?",
      "responses" : {
        "kill" : "GOTO label3"
      }
    },
    "label3" : {
      "action" : "END",
      "message" : "Thanks for playing."
    }
  }
}
这是我的C代码:
dynamicJSON=JsonConvert.DeserializeObject(sourcejson)
这将JSON放入一个对象中,我可以像这样或类似方式访问该对象:
Console.WriteLine(json.labels.start.responses.kill)
但是,我需要指定基于字符串检索哪个键,例如,基于包含“kill”内容的C#字符串检索“kill”。如果在responses中有另一个响应,我可以将C#字符串更改为指定键的名称,然后它将检索它。我怎样才能做到这一点呢?

如果你想继续使用
动态
对象,你可以用
json.labels.start.responses[“kill”]
替换你的print语句,如下所示

[Test]
public void Test()
{
    var sourcejson = @"{
                  ""labels"": {
                    ""start"" : {
                      ""action"" : ""ASK"",
                      ""message"" : ""What do you want to do, {name}?"",
                      ""responses"" : {
                        ""kill"" : ""GOTO label3""
                      }
                    },
                    ""label3"" : {
                      ""action"" : ""END"",
                      ""message"" : ""Thanks for playing.""
                    }
                  }
                }";

    dynamic json = JsonConvert.DeserializeObject(sourcejson);

    Console.WriteLine(json.labels.start.responses["kill"]);
}


您的序列化对象将有一个包含所有属性的
字典
,您可以通过它们的键访问这些值。

我的首选是反序列化到
作业对象

例如:
JsonConvert.DeserializeObject(sourceJson)

然后,您可以使用标准C#索引器引用这些键

var jObj=JsonConvert.derserialized对象(sourceJson);
var kill=jObj[“labels”][“start”][“responses”][“kill”]?.ToString();
但是,请确保在不同的位置进行了相应的空检查,因为它不是“类型安全”代码