如何枚举属性类中字典的键值[重复]

问题描述 投票:0回答:1

这是我为解决使用API​​所遇到的问题而编写的沙盒代码。我知道我需要枚举以下字典才能访问数据,但是我不知道简单的方法。这是我作为玩具代码制作的,请记住,我不应该知道映射属性所需的数据:

using Newtonsoft.Json;

JSON

  {"response": {"country": {"778679": {"city": "MyCity"}}}}

类模型

public class Root
    {
        public Response response { get; set; }
    }
    public class Response
    {
        public Dictionary<int, Country> country { get; set; }
    }
    public class Country
    {
        public string city{ get; set; }
    }

这是我目前的做法,但是没有用,因为我需要知道不断变化的ID号才能获得城市名称。

JsonConvert.DeserializeObject<Root>(Json).response.country[778679].city

返回:

"MyCity"

最不知道ID号的最简单方法是什么?

这就是我想要的访问方式。我可以通过数组的第一个值来获取键值或父属性的值本身的方法

JsonConvert.DeserializeObject<Root>(Json).response.country[0].city

//OR preferably

JsonConvert.DeserializeObject<Root>(Json).response.country.city 

返回:

"MyCity"
c# json dictionary enumeration
1个回答
0
投票

如果您不知道要查找的城市的ID,则必须按名称查找城市。您可以使用FirstOrDefault中的System.Linq来做到这一点:

var data = JsonConvert.DeserializeObject<Root>(json);
var country = data.response.country.FirstOrDefault(kvp => kvp.Value.city == "MyCity");
Console.WriteLine(country.Value.city);

如果您只想列出所有已接收的数据,则可以执行此操作:

var data = JsonConvert.DeserializeObject<Root>(json);
var countries = data.response.country;
foreach(var kvp in countries)
{
    Console.WriteLine($"Code: {kvp.Key} City: {kvp.Value.city}");
}
© www.soinside.com 2019 - 2024. All rights reserved.