2017-09-13 84 views
2

我試過很多東西,但我無法得到對象下的部分進行如何獲得JSON對象手續 - C#

API輸出

"objects": [ 
    { 
    "date": "Mon, 11 Sep 2017 00:00:00 GMT", 
    "images": [ 
     { 
     "naturalHeight": 298, 
     "width": 810, 
     "url": "https://www1.google.com/files/2017/09/Feature-Image-810x298_c.png", 
     "naturalWidth": 810, 
     "primary": true, 
     "height": 298 
     }, 
     { 
     "naturalHeight": 393, 
     "width": 300,      
     "title": "8 Ways to Enter", 
     "url": "https://www1.google.com/files/2017/09/Feature-Image-810x298_csss.png", 
     "naturalWidth": 563, 
     "height": 223 
     }, 
     { 
     "naturalHeight": 300, 
     "width": 169,      
     "url": "https://www1.google.com/files/2017/09/Feature-Image-810x298_themec.png", 
     "naturalWidth": 169, 
     "height": 297 
     }, 
     { 
     "naturalHeight": 300, 
     "width": 169,     
     "title": "Before: Android Oreo’s Stock, Light UI", 
     "url": "https://www1.google.com/files/2017/09/Feature-Image-810x298_dec.png", 
     "naturalWidth": 169, 
     "height": 297 
     }, ...... continue 

我需要獲得第一圖像,其中PRIMARY = TRUE
我試過,沒有運氣以下

var dirs = JObject.Parse(json) 
      .Descendants() 
      .Where(x=>x is JObject) 
      .Where(x=>x["primary"]!=null && x["url"]!=null) 
      .Select(x =>new { URL= (string)x["primary"], PRIMARY = (string)x["url"] }) 
      .ToList(); 

var id = dirs.Find(x => x.Primary == "true").URL; 
+2

將使用Newtonsoft.json的json反序列化爲運行時對象。然後你可以訪問屬性 –

回答

1

您的代碼看起來像

var jObj = JObject.Parse(json)["objects"] 
      .SelectMany(x => x["images"]) 
      .Where(x => x["primary"] != null) 
      .FirstOrDefault(x => (bool)x["primary"]); 

你可以走得更遠一步,通過聲明像

public class Image 
{ 
    public int naturalHeight { get; set; } 
    public int width { get; set; } 
    public string url { get; set; } 
    public int naturalWidth { get; set; } 
    public bool primary { get; set; } 
    public int height { get; set; } 
    public string title { get; set; } 
} 

一個類你可以寫

var image = jObj.ToObject<Image>(); 
+0

謝謝,這工作 – aliusman

-1

您可以使用Newtonsoft.Json NuGet包和其良好使用。

基於Json顯示的示例。

public class SampleJson 
    { 
     [JsonProperty("date")] 
     public string Date { get; set; } 
     [JsonProperty("images")] 
     public List<Image> Images { get; set; } 
     // nested type, you can write it out of SampleJson object brackets 
     class Image 
     { 
      [JsonProperty("naturalHeight")] 
      public int NaturalHeight { get; set; } 
      [JsonProperty("width")] 
      public int Width { get; set; } 
      [JsonProperty("url")] 
      public string Url { get; set; } 
      [JsonProperty("naturalWidth")] 
      public int NaturalWidth { get; set; } 
      [JsonProperty("primary")] 
      public bool Primary { get; set; } 
      [JsonProperty("height")] 
      public int Height { get; set; } 
      [JsonProperty("title")] 
      public string Title { get; set; } 
     } 
    } 

這個方法的用法。

var json = HttpClinet.GetAsync("URL").Result; // your json 

SampleJson obj = JsonConvert.DeserializeObject<SampleJson>(json); 
var query = obj.Images.FirstOrDefault(); // Use LINQ to C# objects 

希望它有幫助。