使用随机生成的值

时间:2016-05-24 20:59:49

标签: c# json json.net

我有一个看起来像这样的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位。

我尝试了很多东西,但没有运气。也许有一种更简单的方法可以做到,但我现在几乎陷入困境,有人可以帮助我吗?

2 个答案:

答案 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);