如何获取JSON对象 - C#

时间:2017-09-13 16:50:26

标签: c# .net json

我尝试了很多东西,但是我无法将对象下的部分拿出来

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 个答案:

答案 0 :(得分: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>();

答案 1 :(得分:-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

希望它有所帮助。