我尝试了很多东西,但是我无法将对象下的部分拿出来
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;
答案 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
希望它有所帮助。