【问题标题】:Having trouble deserializing multiple JSON variable反序列化多个 JSON 变量时遇到问题
【发布时间】:2020-10-20 23:07:38
【问题描述】:

我写了以下代码,它确实反序列化和解析单个 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# json api serialization get


    【解决方案1】:

    你的类不代表你的 json 结构。尝试反序列化为Dictionary&lt;string, getVariables&gt;:

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

    【讨论】:

    • 好的,我试过了,但输出只是给了我:异常:无法将当前 JSON 数组(例如 [1,2,3])反序列化为“System.Collections.Generic.Dictionary”类型2[System.String,API.API.getVariables]' 因为该类型需要一个 JSON 对象(例如 {"name":"value"})才能正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"}).....
    • .... 或将反序列化的类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化的 List。 JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组中反序列化。路径'',第 1 行,位置 1。
    • @YoruTen 您在问题的示例 json 中没有任何数组(例如 [1,2,3])。
    • 这是我从 API 调用中得到的相同 JSON
    • @YoruTen 我已经在你的问题中添加了完整的 json 示例,你可以检查一下。
    【解决方案2】:

    您需要反序列化列表而不是 1 元素

    var result=JsonConvert.Deserialize<List<getVariables>>(json);
    

    之后你就有了你的清单

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多