【问题标题】:Capture value from the JSON array从 JSON 数组中捕获值
【发布时间】:2019-12-21 13:11:45
【问题描述】:

我正在尝试调用 API 并以 JSON 的形式返回结果。我需要解析接收到的数据并在下面提到的数组中的 JSON 数据中的映射下收集特定的数据“键”。我还想得到映射下的键总数,这样我就可以递归数组并检索键。

JSON 数据如下,

{
    "$type": "Type1",
    "mapping": [
        {
            "value": "Value1",
            "key": "Key1"
        },
        {
            "value": "Value2",
            "key": "Key2"
        }
    ]
}

在下面提到之前,我一直停留在代码中。不知道如何进一步进行。请建议我如何获得价值

using (var webResponse = (HttpWebResponse)webrequest.GetResponse())
{
    using (var sr = new StreamReader(webResponse.GetResponseStream()))
    {
       text = sr.ReadToEnd();
       dynamic jsonObject = JsonConvert.DeserializeObject(text);
       //Need suggestion how can I retrieve the specific
    }
}

【问题讨论】:

  • 也许您应该反序列化为类?

标签: c# json json.net


【解决方案1】:

这是一个快速的控制台应用程序,可以执行您正在尝试执行的操作。诀窍是遍历动态对象,直到找到你想要的。但是在你去的时候把所有东西都写成dynamic

class Program
{
    static void Main(string[] args)
    {
        var text = "{ \"$type\": \"Type1\",\"mapping\": [ { \"value\": \"Value1\", \"key\": \"Key1\" }, { \"value\": \"Value2\", \"key\": \"Key2\" } ] }";

        dynamic result = JsonConvert.DeserializeObject(text);
        dynamic mapping = result.mapping;
        foreach(dynamic item in mapping as IEnumerable<dynamic>)
        {
            Console.WriteLine("{0}: {1}", (string)item.value, (string)item.key);
        }
        var done = Console.ReadLine();
    }
}

【讨论】:

  • 这就像一个魅力!非常感谢您的建议。
  • 很高兴它成功了。 dynamic 在您使用 JSON 时非常有用。
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
相关资源
最近更新 更多