2012-08-06 37 views
0

我正在創建一個Windows Phone應用程序並使用JSON.NET來處理數據。
好吧,想象一下,你需要有一個List<myObject>
我不知道如何直接進行,所以我做到以下幾點:列表<T> LINQ到JSON

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]); 
} 

這是任何方式這一切都源自JSON合併成一個數據選擇?

謝謝。

回答

2

你可以只選擇令牌直接,在一個通過建立自己的對象,即:

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

編輯 -

現在你已經修改,您的數據不再包含一個單一的序列。您可以使用Enumerable.Zip合併這些:

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

@АлексейЦветков-Омеличев在這種情況下,你必須使用類似Enumerable.Zip合併的東西放在一起。這就是說,一個循環之後可能會更簡單... – 2012-08-06 19:31:37

+0

非常感謝! – 2012-08-06 19:33:18

+0

@АлексейЦветков-Омеличв增加了一個編輯來向你顯示最新的。 – 2012-08-06 19:39:55