2015-08-20 76 views
0

我有此JSON在JSon中反序列化數組中的一個變量。 C#

{"841973":[{"name":"Nasus's Agents","tier":"GOLD","queue":"RANKED_SOLO_5x5","entries":[{"playerOrTeamId":"841973","playerOrTeamName":"GG InstaVayne","division":"I","leaguePoints":0,"wins":515,"losses":524,"isHotStreak":false,"isVeteran":true,"isFreshBlood":false,"isInactive":false}]}]} 

,我只是想要得到的 「梯隊」 的數據。我知道這個變量是在一個數組中,但我不能從數組中獲取數據。 我嘗試這樣做。

p.summonerRank = (string)JObject.Parse(data2).First.First[p.summonerId]["tier"]; 

data2是我爲webrequest獲得的字符串。 p.summonerId是數字,在本例中爲「841973」,但它可能會在每個請求中更改。

回答

0

這應該工作

string obj = (string)JObject.Parse(DATA).First.First.First["tier"]; 

,如果你確信你的數組將總是有一個項目(或您的數據中的第一項)。

---編輯---

如果你的質量要求更復雜,因爲在註釋中規定,我會建議不同的方法

聲明這些類

public class Entry 
{ 
    public string playerOrTeamId { get; set; } 
    public string playerOrTeamName { get; set; } 
    public string division { get; set; } 
    public int leaguePoints { get; set; } 
    public int wins { get; set; } 
    public int losses { get; set; } 
    public bool isHotStreak { get; set; } 
    public bool isVeteran { get; set; } 
    public bool isFreshBlood { get; set; } 
    public bool isInactive { get; set; } 
} 

public class Entries 
{ 
    public string name { get; set; } 
    public string tier { get; set; } 
    public string queue { get; set; } 
    public List<Entry> entries { get; set; } 
} 

和反序列化爲

var obj = JsonConvert.DeserializeObject<Dictionary<string,List<Entries>>>(data); 
var division = obj.Values.First()[0].entries[0].division; 

現在,您可以以安全的方式訪問您的所有資產(VS的intelisense將幫助您)

+0

我有這種幫助。 附加信息:無法訪問Newtonsoft.Json.Linq.JProperty上的子值。 –

+0

@FelaBird我用你發佈的json測試了它,它應該可以工作..... – Eser

+0

哦,是的,我有一個語法錯誤。有用。謝謝。 –