我有一个JSON文件,如下所示。它基本上是一个JSON文件,使用他们的API从维基百科上删除。
{
"batchcomplete": "",
"query": {
"pages": {
"31329803": {
"pageid": 31329803,
"ns": 0,
"title": "Wiki Title",
"extract": "<p><b>Your Wiki Title</b></p>"
}
}
}
}
"pages">下生成的数字(即pageID)是随机的。我正在尝试检索"extract">值,但似乎无法获取。
我正在使用Visual Studio&使用NewtonSoft JSON.net进行解析。我创建了一个类来检索我想要的数据,它看起来是这样的。
public class WikiPage
{
public string title { get; set; }
public int pageid { get; set; }
public int ns { get; set; }
public string extract { get; set; }
}
我试图绕过JSON树&获得我想要的价值。我用来获取值的代码如下:
static void Main(string[] args)
{
// Getting JSON string from file
string JSONString = File.ReadAllText("wiki.json");
JObject wikiSearchResult = JObject.Parse(JSONString);
IList<JToken> wikiPages = wikiSearchResult["query"]["pages"].Children().ToList();
JToken result = wikiPages[0];
var wp = JsonConvert.DeserializeObject<WikiPage>(result.ToString());
// Writing data
Console.WriteLine(wp.extract);
Console.ReadLine();
}
当我运行程序时,我得到一个错误:
类型的未处理异常中出现"Newtonsoft.Json.JsonSerializationException"Newtonsoft.Json.dll
附加信息:将值"31329803"转换为类型时出错"JSON_test.WikPage"。路径",第1行,位置10。
我尝试了很多东西,但没有运气。也许有一种更简单的方法,但我现在很困,有人能帮我吗?
您差不多完成了,只需通过以下方式获取result
:
JToken result = wikiPages[0].Children().First();
不能像那样反序列化键值对。试试这个:
var json = JObject.Parse(JSONString);
var pages = json["query"]["pages"].ToObject<Dictionary<string, WikiPage>>();
var page = pages.First().Value;
Console.WriteLine(page.extract);