2014-03-19 165 views
2
[ 
    { 
    "id": "133", 
    "label": "S/M", 
    "price": "0", 
    "oldPrice": "0", 
    "products": [ 
     "318", 
     "321", 
     "324", 
     "327" 
    ] 
    }, 
    { 
    "id": "132", 
    "label": "L/XL", 
    "price": "0", 
    "oldPrice": "0", 
    "products": [ 
     "319", 
     "322", 
     "325", 
     "328" 
    ] 
    }, 
    { 
    "id": "131", 
    "label": "XXL/XXXL", 
    "price": "0", 
    "oldPrice": "0", 
    "products": [ 
     "320", 
     "323", 
     "326", 
     "329" 
    ] 
    } 
] 

我想獲得'label',其中數組「產品」包含「321」。我如何做到這一點?我用庫json.net如何從linq獲取json的數據?

i make linq expression 
JArray ja = JArray("this json"); 
JValue id = JValue.Parse("328"); 
ja.Select(x => x["label"]).Where(x => x["products"].Contains(id)); 

,但我得到「上Newtonsoft.Json.Linq.JValue無法訪問的孩子的價值。」

+3

您是否嘗試過使用JSON解串器如JSON.NET? –

回答

1

所以,你應該首先定義類:

class MyObj { 
public string id { get; set; } 
public string[] products { get; set; } 
public string label { get; set; } 

} 

和反序列化,而不是對象:

var deserialized = serializer.Deserialize<MyObj>(str); 
var result = deserialized.Where(r => r.products.Contains("321")).ToList(); 
+2

'serializer.Deserialize (str);'這不起作用,OP有一系列項目 –

1

您需要使用圖書館像JSON.NET。 在這種情況下產品是

public class Product 
{ 
    public string id { get; set; } 
    public string[] products { get; set; } 
    public string label { get; set; } 
} 
1

爲此,您可以使用任何的JSON庫,你可以寫這樣的事情

string json = <your json string>; 
var deserializedProduct = JsonConvert.DeserializeObject<List<Product>>(json).Where(p => p.products.Contains("321")).ToList(); 

。例如JSON.NET

LINQ to JSON樣品

+0

我用這個庫。但我不能做出正確的linq表達。 – user3436765