首页 > 解决方案 > 反序列化多个 JSON 变量时遇到问题

问题描述

我编写了以下代码,它确实反序列化和解析单个 JSON 变量,但是,它不适用于多个

API 检索到的 JSON 具有类似于以下的变量,但是,第一个分支具有始终更改的数字,例如 value_abc_######,其中 ###### 始终是不同的数字,所以我没有关于我得到这个输出的想法。

这是 API 调用返回的 JSON 结构:

{
  "value_abc_154649": {
    "Name": "",
    "Address": "",
    "Phone": "",
  },
  "value_abc_616447": {
    "Name": "",
    "Address": "",
    "Phone": "",
  },
  "value_abc_912374": {
    "Name": "",
    "Address": "",
    "Phone": ""
  }
}

虽然这是我编写的代码,但如果 JSON 只有 1 个分支结果,它可以正常工作,但如果是倍数则不会

    class getVariables
    {   
        public string Name { get; set; }
    }

    class fetch
    {
        var client = new System.Net.WebClient();
        string json = client.DownloadString(API_URL);
        var result = JsonConvert.DeserializeObject<getVariables>(json);
        Console.Write("\nName: " + result.Name); //this just print an empty value

        /*I also tried this structure but the for loop doesn't work
        for (result)
        {
            Console.Write("\nName: " + result.Name);
        }*/
    }

标签: c#jsonapiserializationget

解决方案


你的类不代表你的 json 结构。尝试反序列化为Dictionary<string, getVariables>

        var json = @"{
        ""value_abc_154649"": {
            ""Name"": """",
    ""Address"": """",
    ""Phone"": """",
  },
  ""value_abc_616447"": {
            ""Name"": """",
    ""Address"": """",
    ""Phone"": """",
  },
  ""value_abc_912374"": {
            ""Name"": """",
    ""Address"": """",
    ""Phone"": """"
  }
    }";

    var result = JsonConvert.DeserializeObject<Dictionary<string, getVariables>>(json);
    // foreach(var r in result.Values)
    // {
    //    Console.Write("\nName: " + r.Name);
    //}
    // or to print with keys: 
    foreach(var kvp in result)
    {
        Console.WriteLine($"Key: {kvp.Key}, Name: {kvp.Value.Name}");
    }

推荐阅读