2016-05-24 6 views
-1

Dies ist der Code, den ich verwende JSON.But deserialisieren, wenn ich es in der Konsole versuchen zu schreiben, sagt er "System.Collections.Generic.Dictionary`2 [System.String, System.Object]"Wie demerialize ich ein Json-Objekt?

System.Net.WebClient wc = new System.Net.WebClient(); 
string Jayson = wc.DownloadString("http://api.urbandictionary.com/v0/define?term=api"); 
object obj = JsonHelper.Deserialize(Jayson); 
Dictionary<string, object> values = 
     JsonConvert.DeserializeObject<Dictionary<string, object>>(Jayson); 
Console.WriteLine(values); 

Wie deserialisiere ich es und extrahiere nur die "Definition" aus dem JSON?

+0

Könnten Sie Probenwert von „Jayson“ zur Verfügung stellen? –

+0

Wenn Sie http://api.urbandictionary.com/v0/define?term=api öffnen, können Sie alle JSONs sehen. Ich möchte extrahieren ": [{" definition ": –

+0

Es ist kein Problem zu versuchen, ein Wörterbuch zu schreiben? Was ist mit etwas wie values.ToList(). ForEach (x => Console.WriteLine (x.Key)); – Mulflar

Antwort

2

Sie können einige konkrete Typen erstellen, um zu erfassen und mit denen deserialisieren eher als generische Typen, zum Beispiel:

public class Result 
{ 

    [JsonProperty("definition")] 
    public string Definition { get; set; } 

    [JsonProperty("author")] 
    public string Author { get; set; } 

    [JsonProperty("permalink")] 
    public string PermaLink { get; set; } 

} 

public class Results 
{ 

    [JsonProperty("list")] 
    public List<Result> List { get; set; } 

    [JsonProperty("tags")] 
    public List<string> Tags { get; set; } 

} 

Dann:

var results = JsonConvert.DeserializeObject<Results>(json); 

Anschließend können Sie die Definitionen iterieren:

foreach(var result in results.List) 
    Console.WriteLine(result.Definition); 

Json.NET ignoriert die anderen Eigenschaften, die nicht zugeordnet werden können, sodass Sie hinzufügen/entfernen können sie nach Bedarf.

+0

Wenn ich den for Befehl versuche, gibt es mir einen Fehler. " Fehler \t CS1579 \t foreach Anweisung kann nicht auf Variablen des Typs 'Ergebnisse' operieren, da 'Ergebnisse' keine öffentliche Definition für 'GetEnumerator' \t" –

+0

eine weitere Frage enthält. .. Es gibt anscheinend mehrere Definitionen in der Verbindung.Wie bekomme ich nur die erste und ignoriere den Rest? –

0

analysieren Sie Ihre JSON-String zu einem JObject und dann bekommen die "defenition" Eigenschaft von ihm

jObj = JObject.Parse("yourJsonString");  
string defenition = jo["definition"]; 
1

Sie bekommen „System.Collections.Generic.Dictionary`2 [System.String, System. Object] "weil nur Strings schreiben kann und es nicht weiß, wie man ein Dictionary in einen String umwandelt.

Um alle Einträge, Schleife über die Sammlung zu drucken und jeden Eintrag ausdrucken:

System.Net.WebClient wc = new System.Net.WebClient(); 
string Jayson = wc.DownloadString("http://api.urbandictionary.com/v0/define?term=api"); 
object obj = JsonHelper.Deserialize(Jayson); 
Dictionary<string, object> values = 
     JsonConvert.DeserializeObject<Dictionary<string, object>>(Jayson); 

foreach(var entry in values) 
{ 
    Console.WriteLine($"{entry.Key} : {entry.Value}"); 
}