我有一个看起来像这样的JSON文件。它基本上是一个使用他们的API直接从维基百科采取的JSON文件。
{
"batchcomplete": "",
"query": {
"pages": {
"31329803": {
"pageid": 31329803,
"ns": 0,
"title": "Wiki Title",
"extract": "<p><b>Your Wiki Title</b></p>"
}
}
}
}
“pages”(即pageID)下生成的数字是随机的。我正在尝试检索“extract”值,但我似乎无法得到它。
我正在使用Visual Studio&amp;使用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树&amp;得到我想要的价值。我用来获取值的代码如下:
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.WikiPage'。路径'',第1行,第10位。
我尝试了很多东西,但没有运气。也许有一种更简单的方法可以做到,但我现在几乎陷入困境,有人可以帮助我吗?
答案 0 :(得分:0)
你差不多完成了,只需这样result
:
JToken result = wikiPages[0].Children().First();
答案 1 :(得分:0)
您不能像这样反序列化键值对。试试这个:
var json = JObject.Parse(JSONString);
var pages = json["query"]["pages"].ToObject<Dictionary<string, WikiPage>>();
var page = pages.First().Value;
Console.WriteLine(page.extract);