2016-05-24 3 views
4

このようなJSONファイルがあります。これは、基本的には、APIを使用してWikipediaから得たJSONファイルです。ランダムに生成された値を使用してJSON値を取得します。

{ 
    "batchcomplete": "", 
    "query": { 
     "pages": { 
      "31329803": { 
      "pageid": 31329803, 
      "ns": 0, 
      "title": "Wiki Title", 
      "extract": "<p><b>Your Wiki Title</b></p>" 
      } 
     } 
    } 
} 

"ページ"(たpageIDです)の下で生成された番号はランダムです。私は""の値を抽出しようとしていますが、それを得ることはできません。

私は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ツリーを回避しようとしています。私は多くのことを試してみた

An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll

Additional information: Error converting value "31329803" to type 'JSON_test.WikiPage'. Path '', line 1, position 10.

、ない運:

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(); 
} 

私はプログラムのプログラムを実行すると、私はエラーを取得する次のように私は値を取得するために使用するコードです。多分もっと単純な方法があるかもしれませんが、私は今のところほとんど固執しています。誰かが私を助けることができますか?

+1

うわー、それを解決するためのすべての関連情報が含まれています。ユニコーン! –

答えて

0

あなたはほぼ完了している、ちょうどresultこの方法を取得:

JToken result = wikiPages[0].Children().First(); 
+0

ありがとう、それは問題を解決します。 @ ilya-chumakov –

0

あなたはそのようなキーと値のペアをデシリアライズすることはできません。代わりにこれを試してみてください:

var json = JObject.Parse(JSONString); 
var pages = json["query"]["pages"].ToObject<Dictionary<string, WikiPage>>(); 

var page = pages.First().Value; 
Console.WriteLine(page.extract); 
+0

ありがとう、あなたの方法は問題を解決します。 –

関連する問題