C#从反序列化JSON对象中的数组中获取值

C#从反序列化JSON对象中的数组中获取值,c#,json,foreach,C#,Json,Foreach,我有一个JsonObject,我将其反序列化以使用从api获得的数据。 不知何故,我似乎不知道如何从返回的数组中获取数据,尽管我可以读取布尔“ok”返回的值。 我试图将数组放入foreach循环中以检索所有名称,但没有成功,因为我不知道 { "ok": true, "establishments": [ { "id": "d2sd2-axsd7gjd2-g3sdasd", "name": "Hops n Beers"

我有一个
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循环获得机构的名称。 我的代码(删除了循环,尝试了各种方法后变得凌乱):


最好的解决方案是创建一个类,表示您正在接收的对象,并将内容反序列化为该类型

你已经接近那门课了,你只需要说它是一个机构列表

[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");
}
[JsonObject(MemberSerialization.OptIn)]
公共类LocationListResults
{
[JsonProperty(“ok”)]
公共布尔OK{get;set;}
[JsonProperty(“机构”)]
公共列表机构{get;set;}
}
公共阶级的建立
{
[JsonProperty(“id”)]
公共字符串Id{get;set;}
[JsonProperty(“名称”)]
公共字符串名称{get;set;}
[JsonProperty(“地址”)]
公共字符串地址{get;set;}
[JsonProperty(“lat”)]
公共字符串Lat{get;set;}
[JsonProperty(“lng”)]
公共字符串Lng{get;set;}
}
var deserializedLocList=JsonConvert.DeserializeObject(wait response.Content.ReadAsStringAsync());
if(/*在此访问反序列化dloclist中的布尔值“OK”或您需要的任何值*/)
{
//我确实得到了一个真实的back,但这里我想创建一个foreach循环来获取所有的名称
等待DisplayAlert(“成功”,“万岁!”,“确定”);
}
其他的
{
等待DisplayAlert(“Fout”,/*在此处访问反序列化dloclist中的值或您需要的任何值*/,“OK”);
}

最佳解决方案是创建一个类,表示您正在接收的对象,并将内容反序列化为该类型

你已经接近那门课了,你只需要说它是一个机构列表

[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");
}
[JsonObject(MemberSerialization.OptIn)]
公共类LocationListResults
{
[JsonProperty(“ok”)]
公共布尔OK{get;set;}
[JsonProperty(“机构”)]
公共列表机构{get;set;}
}
公共阶级的建立
{
[JsonProperty(“id”)]
公共字符串Id{get;set;}
[JsonProperty(“名称”)]
公共字符串名称{get;set;}
[JsonProperty(“地址”)]
公共字符串地址{get;set;}
[JsonProperty(“lat”)]
公共字符串Lat{get;set;}
[JsonProperty(“lng”)]
公共字符串Lng{get;set;}
}
var deserializedLocList=JsonConvert.DeserializeObject(wait response.Content.ReadAsStringAsync());
if(/*在此访问反序列化dloclist中的布尔值“OK”或您需要的任何值*/)
{
//我确实得到了一个真实的back,但这里我想创建一个foreach循环来获取所有的名称
等待DisplayAlert(“成功”,“万岁!”,“确定”);
}
其他的
{
等待DisplayAlert(“Fout”,/*在此处访问反序列化dloclist中的值或您需要的任何值*/,“OK”);
}

为什么不创建一个表示数据结构的类,然后将其序列化为该类型?我确实找到了一些相关方法,并创建了一个列表,但我可能做错了什么。将把我创建的类添加到问题中,因为我仍然有那个文件。在删除JSON中的错误后,你甚至可以使用它来获得一个好的起点。是的,我要说的和Dirk一样,到站点粘贴json,让工具为您生成类,并使用它将json加载到类的实例或使用它所依赖的类的数组中。为什么不创建一个表示数据结构的类,然后序列化为该类型?我确实找到了一些相关的方法,并创建了一个列表,但我可能做错了什么。将把我创建的类添加到问题中,因为我仍然有那个文件。在删除JSON中的错误后,你甚至可以使用它来获得一个好的起点。是的,我要说的和Dirk一样,转到站点粘贴json,让工具为您生成类,并使用它将json加载到类的实例或使用它所依赖的类的数组中。太棒了,谢谢!现在我可以通过一个泡沫循环轻松地访问所有内容(:太棒了,谢谢!现在我可以通过泡沫循环轻松地访问所有内容(:
[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");
}