为什么会显示“预期为int32数组索引”?

时间:2019-08-23 20:50:17

标签: c# json

因此,我只想执行一个获取帐户的排名和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索引   预期的

基本思想是,如果我获得用户名,则可以按等级对它们进行排序,而我只是想这样做,但是我不知道这样做是否可行!

1 个答案:

答案 0 :(得分:1)

init显然是return reduce(execution::seq, cbegin(coeffs), cend(coeffs), 0.0, ...); 的数组(ranks仅将类型检查推迟到运行时)。 JArray模拟一个普通的C#数组,该数组不能由字符串索引,只能由数字索引(因此会出错)。

您需要索引数组(给出dynamic),然后才能尝试获取属性:

JArray

话虽如此,这确实很难正确读取或写入。如果您反序列化为一个代表要获取的数据的类,则不会出现此类错误。