所以我只想制作一个命令,获取账户的排名和pp,并按排名排序,问题是这是可能的,还是我又在胡说八道?
[Command("rank")]
public async Task RankList([Remainder]string usernames = null)
{
string[] usernameList = usernames.Split(",");
string url = $"";
WebClient profile = new WebClient();
int countUsernames = usernameList.Count();
string[] ranking = new string[countUsernames];
dynamic[] ranks = new dynamic[countUsernames];
string[] pp_rank = new string[countUsernames];
float[] pp_raw = new float[countUsernames];
for (int i = 0; i < usernameList.Count(); i++)
{
url = $"https://osu.ppy.sh/api/get_user?k={k}&u={usernameList[i]}";
ranking[i] = profile.DownloadString(url);
ranks[i] = JsonConvert.DeserializeObject(ranking[i]);
pp_rank[i] = (string)ranks[0]["pp_rank"];
pp_raw[i] = ranks[0]["pp_raw"];
}
}
我收到错误消息:
使用无效键访问的JArray值:"pp_rank"Int32 arrey索引预期
基本想法是,如果我得到用户名,我可以按排名列出它们的列表,我只想这样做,但我不知道这是否可能!
ranks
显然是JArray
的数组(dynamic
只是将类型检查推迟到运行时)。JArray
模拟一个普通的C#数组,该数组不能通过字符串进行索引,只能通过数字进行索引(因此出现错误)。
您需要索引到数组中(给出JObject
),然后可以尝试获取属性:
(string)ranks[0][0]["pp_rank"]; //Get the first element of the array's pp_prank
话虽如此,这真的很难正确阅读或书写。如果反序列化为一个表示要返回的数据的类,就不会出现这种错误。