簡體   English   中英

C#從反序列化JSON對象中的數組獲取值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM