Bahamut
Bahamut

Reputation: 1939

parsing by Linq to JSON

I was trying to parse this using System.Json but I'm a bit confused how to use LINQ on this. The JSON string returned was something like:

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

My code starts out as:

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

then proceeds to the event handler where the result is stored in a Stream. Any example how to get just the SEARCHVALs, CATEGORYs, Xs and Ys from the stream using LINQ?

Upvotes: 2

Views: 369

Answers (1)

AnthonyWJones
AnthonyWJones

Reputation: 189457

The DataContractJSonSerializer is one way to do it but the presence of the "PageCount" object makes its use awkard. It looks to me as though someone has goofed on the server end, it would make much more sense to have the page count a property of the outer object and therefore leave the search results array to contain an homogeneous set of objects.

The System.Json namespace is handy for this sort of JSON since its very flexible.

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

Now you could use some Linq to get a set of objects out of this but first so we need to create a DTO type for it:-

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

So now the results query is:-

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

The resultList is List<SearchResult> which you can now bind into some Xaml for display.

Upvotes: 1

Related Questions