2016-05-24 9 views
4

Ich habe eine JSON-Datei, die so aussieht. Es ist im Grunde genommen eine JSON-Datei, die aus Wikipedia mit ihrer API erstellt wurde.Abrufen von JSON-Wert mit zufällig generierten Wert

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

Die Anzahl erzeugt unter "Seiten" (die die pageID ist) ist zufällig. Ich versuche, den "Auszug" Wert zu erhalten, aber ich kann nicht scheinen, es zu bekommen.

Ich verwende Visual Studio & mit NewtonSoft JSON.net zum Parsen. Ich habe eine Klasse zum Abrufen der Daten erstellt, die ich möchte, und es sieht so aus.

public class WikiPage 
    { 
     public string title { get; set; } 
     public int pageid { get; set; } 
     public int ns { get; set; } 
     public string extract { get; set; } 
    } 

Ich versuche, die JSON-Baum zu umgehen, den Wert Ich möchte & bekommen. Der Code Ich benutze den Wert zu erhalten ist wie folgt:

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

Wenn ich das Programm-Programm ausführen, bekomme ich eine Fehlermeldung:

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.

ich viele Dinge ausprobiert habe, aber kein Glück. Vielleicht gibt es einen einfacheren Weg dazu, aber ich stecke gerade ziemlich fest, kann mir jemand helfen?

+1

Wow, eine Frage, die alle relevanten Informationen enthält, um es zu lösen. Ein Einhorn! –

Antwort

0

Sie fast fertig sind, erhalten nur result auf diese Weise:

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

Danke, das löst das Problem. @ ilya-chumakov –

0

Sie können einen Schlüsselwertpaar wie das deserialisieren. Versuchen Sie dies stattdessen:

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

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

Vielen Dank, Ihre Methode löst das Problem. –

Verwandte Themen