Json.net: Kann JObject.SelectToken tun die gleiche Sache, die XPath tun kann? Wenn ja, was sind die syntax?

Die Antwort auf die Abfrage posted in 2009 wurde eine neue Funktion JObject.SelectToken soll liefern XPath wie Funktionalität. Ich bin jetzt mit JSON.NET 4.5 R11 und SelectToken - Methode zur Verfügung.

Aber ich konnte nicht finden viel Dokumentation (im wesentlichen syntax) über den Pfad-string übergeben werden SelectToken Funktion.

Folgende code erzeugt einen Json-string und auf die ich gerne ausführen einer Xpath-wie-Methode (d.h. meines Wissens SelectToken)

IList branches = new ArrayList();
IList employees = new ArrayList();
employees.Add(new { EmpId = 1, Name = "Name1" });
employees.Add(new { EmpId = 2, Name = "Name2" });
employees.Add(new { EmpId = 3, Name = "Name3" });
IList employees2 = new ArrayList();
employees2.Add(new { EmpId = 4, Name = "Name1" });
employees2.Add(new { EmpId = 5, Name = "Name5" });
branches.Add(new { BranchName = "Branch1", Employees = employees });
branches.Add(new { BranchName = "Branch2", Employees = employees });

string json = JsonConvert.SerializeObject(branches);

var branchesDeserialised = JsonConvert.DeserializeAnonymousType(json, new[] { new { BranchName = "", Employees = new[] { new { EmpId = 0, Name = "" } } } });

JArray ja = JArray.Parse(json);
var AllName1Tokens = ja.SelectToken(@"..Name=""Name1"""); //Get all names that are having Name = "Name1" irrespective of branch

Da ich nicht die Binärdateien für die Klassen und die Struktur der Json-string ist so groß, dass es schwierig sein wird, zu verwenden dynamische. So ist die Verwendung von LINQ auf die Objekte nach der de-Serialisierung nicht möglich. Ich möchte nicht konvertieren der Json-string in XML oder ein anderes format, um die Auswahl entweder. Auch möchte ich nicht schreiben code zu analysieren.

Was sind die syntax der Path parameter der SelectToken Funktion? Wie wähle ich alle EmpId von employees wo Name=”Name1”?

Edit1: Ist es möglich, dass das Ergebnis mit JObject.Select (LINQ) Abfragen auf JSON-string (nicht auf das Reale Objekt) im Falle von SelectToken ist nicht in der Lage, es zu tun? Was ist regex?

InformationsquelleAutor keyr | 2012-12-08
Schreibe einen Kommentar