2 Stimmen

Parsing durch Linq to JSON

Ich habe versucht, dies zu analysieren, indem ich System.Json aber ich bin ein bisschen verwirrt, wie man LINQ auf diese verwenden. Die JSON-Zeichenfolge zurückgegeben wurde etwas wie:

{"SearchResults":[{"PageCount":"1"},
{"SEARCHVAL":"Result","CATEGORY":"Category1","X":"1","Y":"2"},
{"SEARCHVAL":"AnotherResult","CATEGORY":"Category1","X":"2","Y":"2"}]}

Mein Code beginnt wie folgt:

WebClient client = new WebClient();
client.OpenReadCompleted +=
    new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(uri);

geht dann an den Event-Handler weiter, wo das Ergebnis in einem Stream gespeichert wird. Ein Beispiel, wie man nur die SEARCHVAL s, CATEGORY s, X s und Y s aus dem Stream mit LINQ?

1voto

AnthonyWJones Punkte 182582

En DataContractJSonSerializer ist eine Möglichkeit, es zu tun, aber das Vorhandensein des "PageCount"-Objekts macht seine Verwendung umständlich. Es sieht für mich so aus, als ob jemand auf der Serverseite gepatzt hat. Es wäre viel sinnvoller, die Seitenzahl als Eigenschaft des äußeren Objekts zu haben und somit das Suchergebnisfeld eine homogene Menge von Objekten enthalten zu lassen.

En System.Json Namespace ist praktisch für diese Art von JSON, da er sehr flexibel ist.

JsonObject searchResults = (JsonObject)JsonValue.Load(e.Result);

Nun könnte man Linq verwenden, um eine Reihe von Objekten daraus zu erhalten, aber zuerst müssen wir einen DTO-Typ dafür erstellen:-

 public class SearchResult
 {
      public string SearchValue {get; set;}
      public string Category {get; set;}
      public string X {get; set;}
      public string Y {get; set;}
 }

Die Ergebnisabfrage lautet jetzt also:-

var resultList = ((JsonArray)searchResults["SearchResults"])
   .OfType<JsonObject>()
   .Where(o => o.ContainsKey("SEARCHVAL"))
   .Select(o => new SearchResult() { 
       SearchValue = o["SEARCHVALUE"],
       Category = o["CATEGORY"].
       X = o["X"],
       Y = o["Y"]
   }).ToList();

En resultList ist List<SearchResult> die Sie nun in eine Xaml-Datei zur Anzeige einbinden können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X