【问题标题】:Get key from JSON by string using JSON.NET使用 JSON.NET 通过字符串从 JSON 中获取密钥
【发布时间】:2021-02-17 08:44:38
【问题描述】:

我需要能够使用 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# 代码:dynamic json = JsonConvert.DeserializeObject(sourcejson);
这会将 JSON 放入我可以像这样或类似方式访问的对象中: Console.WriteLine(json.labels.start.responses.kill);
但是,我需要根据字符串指定要检索的键,例如,根据内容为“kill”的 C# 字符串检索“kill”。如果我在响应中有另一个响应,我可以将 C# 字符串更改为指定键的名称,然后它会检索它。我究竟如何才能做到这一点?

【问题讨论】:

    标签: c# json .net


    【解决方案1】:

    我的偏好是反序列化为JObject

    例如:JsonConvert.DeserializeObject<JObject>(sourceJson);

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

    var jObj = JsonConvert.DerserializeObject<JObject>(sourceJson);
    var kill = jObj["labels"]["start"]["responses"]["kill"]?.ToString();
    

    但是,请确保您在各个地方都有适当的空检查,因为它不是“类型安全”的代码。

    【讨论】:

      【解决方案2】:

      如果您想继续使用dynamic 对象,您可以将您的打印语句替换为json.labels.start.responses["kill"],如下所示;

      [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"]);
      }
      
      

      您的序列化对象将具有所有属性的Dictionary&lt;string, object&gt;,您可以通过它们的键访问值。

      【讨论】:

        猜你喜欢
        • 2021-09-01
        • 2020-11-20
        • 2022-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        相关资源
        最近更新 更多