List<T> LINQ to JSON

I'm creating a Windows Phone app and using JSON.NET to process data.
Well, imagine, that you need to have a List<myObject>.
I don't know how to make it directly, so I do the following:

IList<string> data1= json["response"].First.Select(data => (string)data.SelectToken("data1")).ToList();
IList<string> data2= json["response"].Last.Select(data => (string)data.SelectToken("data2")).ToList();
IList<string> data3 = json["response"].First.Select(data => (string)data.SelectToken("data3")).ToList();

List<myObject> myList = new List<myObject>();

for (int i = 0; i < data1.Count; i++)
{
    myList.Add(data1[i], data2[i], data3[i]);
}

Is it any way to combine all this into one data selection from json?

Thank you.

Upvotes: 0

Views: 859

Answers (1)

Reed Copsey
Reed Copsey

Reputation: 564423

You could just select the tokens directly, and build your objects in one pass, ie:

List<myObject> myList = json["response"].First.Select(data => 
     new myObject(
           (string)data.SelectToken("data1"),
           (string)data.SelectToken("data2"),
           (string)data.SelectToken("data3")
         )).ToList();

Edit -

Now that you've edited, your data no longer contains a single sequence. You can use Enumerable.Zip to merge these:

var data1 = json["response"].First.Select(d => new { 
           d1 = (string)data.SelectToken("data1"),
           d3 = (string)data.SelectToken("data3") });
var data2 = json["response"].Last.Select(data => (string)data.SelectToken("data2"));

List<myObject> results = data1.Zip(data2, (d, d2) => new myObject(d.d1, d2, d.d3)).ToList();

Upvotes: 2

Related Questions