[英]C# get value from Array in Deserialized JSON Object
我有一个JsonObject
,可以反序列化以使用从api获取的数据。 尽管我可以读取布尔值“ ok”返回的内容,但我似乎无法弄清楚如何从返回的数组中获取数据。 我试图将数组放入foreach循环中以检索所有名称,但是没有成功,因为我没有
{
"ok": true,
"establishments": [
{
"id": "d2sd2-axsd7gjd2-g3sdasd",
"name": "Hops n Beers",
"address": ":HopeStreet",
"lat": : 54.595112,
"lng": : -5.935926,
},
{
"id": "z1ty4-axst7jjd2-g3spocd",
"name": "Good ol Bakery",
"address": ":Bakerstreet",
"lat": : 54.54312,
"lng": : -5.11926,
},
]
}
^这是api返回的内容
我现在的目标是通过foreach循环获取企业名称。 我的代码(删除循环,尝试各种方法后变得凌乱):
var deserializedLocList = JsonConvert.DeserializeObject<IDictionary<string, object>>(await response.Content.ReadAsStringAsync());
if ((bool)deserializedLocList["ok"])
{
//I do get a true back, but here I want to create a foreach loop to get all the names
await DisplayAlert("Succes", "HOORAY!", "OK");
}
else
{
await DisplayAlert("Fout", (string)deserializedLocList["reason"], "OK");
}
我还创建了一个类,在尝试某些事情时使用了该类,而不是使用Dictionary创建List。
班级:
[JsonObject(MemberSerialization.OptIn)]
public class LocationListResults
{
[JsonProperty("establishments")]
public Establishment Establishments { get; set; }
}
public class Establishment
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("address")]
public string Address{ get; set; }
[JsonProperty("lat")]
public string Lat{ get; set; }
[JsonProperty("lng")]
public string Lng { get; set; }
}
最佳的最佳解决方案是创建一个Class,代表要接收的对象,然后将内容反序列化为该类型。
您即将上那堂课,您只需说它的场所是场所的列表
[JsonObject(MemberSerialization.OptIn)]
public class LocationListResults
{
[JsonProperty("ok")]
public Boolean OK { get; set; }
[JsonProperty("establishments")]
public List<Establishment> Establishments { get; set; }
}
public class Establishment
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("address")]
public string Address{ get; set; }
[JsonProperty("lat")]
public string Lat{ get; set; }
[JsonProperty("lng")]
public string Lng { get; set; }
}
var deserializedLocList = JsonConvert.DeserializeObject<LocationListResults>(await response.Content.ReadAsStringAsync());
if (/* access here the boolean 'okay' from deserializedLocList or whatever you require */)
{
//I do get a true back, but here I want to create a foreach loop to get all the names
await DisplayAlert("Succes", "HOORAY!", "OK");
}
else
{
await DisplayAlert("Fout", /* access here the value from deserializedLocList or whatever you need */, "OK");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.