这是我为解决使用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"
如果您不知道要查找的城市的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}");
}