为什么它说"预期 int32 数组索引"?



所以我只想制作一个命令,获取账户的排名和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

话虽如此,这真的很难正确阅读或书写。如果反序列化为一个表示要返回的数据的类,就不会出现这种错误。

最新更新