You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用维基百科API获取JSON数据报错及未知pageID获取方法问询

异常原因

你抛出System.ArgumentException的核心原因是代码中类型转换逻辑错误:

string pageID = (string)jsonQuery;

jsonData["query"]返回的是JObject类型的嵌套JSON对象(对应接口返回结构里的query节点,内部还包含pages字段),而非字符串类型,Newtonsoft.Json 不支持直接将JObject强转为string,因此触发参数异常。

获取未知pageID的实现方案

由于pages节点下的键是动态的pageID数值,你可以通过两种常用方式枚举获取该值:

方式1:直接枚举pages节点的属性

JObject的Properties()方法可以返回所有子属性集合,属性名就是你需要的pageID:

// 原有请求代码建议用using包裹避免资源泄漏,解析逻辑调整如下
using (WebResponse response = wrREQUEST.GetResponse())
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
    string responseData = streamReader.ReadToEnd();
    JObject jsonData = JObject.Parse(responseData);
    JObject pagesNode = jsonData["query"]["pages"] as JObject;

    // 遍历所有page属性
    foreach (var pageProperty in pagesNode.Properties())
    {
        string pageId = pageProperty.Name; // 直接获取字符串形式的pageID,示例中为"31717"
        // 还可继续读取page内的其他字段
        string pageTitle = pageProperty.Value["title"].ToString();
    }

    // 如果确定每次请求只会返回1个page,可直接取第一个属性
    string firstPageId = pagesNode.Properties().First().Name;
}

方式2:反序列化为字典结构

你可以将pages节点直接转换为Dictionary结构,字典的Key就是pageID:

Dictionary<string, JObject> pageDict = jsonData["query"]["pages"].ToObject<Dictionary<string, JObject>>();
foreach (var kv in pageDict)
{
    string pageId = kv.Key;
    JObject pageDetail = kv.Value;
}

内容的提问来源于stack exchange,提问作者Walker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:54:04