如何在Json.Net中从子节点id获取父节点id

问题描述 投票:0回答:1

这是我的 Json 字符串:

[
  {
    "Order": 1,
    "IssueId": 83719,
    "Journal": "HLRF",
    "Identity": "HLRF, Vol.137, Iss.4, y.2024, February 2024",
    "Web": "https://harvardlawreview.org/forum/issue/83719",
    "Articles": [
      {
        "Link": "https://harvardlawreview.org/forum/article/1451533",
        "Pdf": 3789188
      },
      {
        "Link": "https://harvardlawreview.org/forum/article/1451561",
        "Pdf": 3789306
      },
      {
        "Link": "https://harvardlawreview.org/forum/article/1451574",
        "Pdf": 3789358
      }
    ]
  }
]

我正在使用 Json.Net 和像这样的对象结构:

var issues = JsonConvert.DeserializeObject<List<Issue>>("___Json.String___");

    public class Issue
    {
        public int Order { get; set; }
        public int IssueId { get; set; }
        public string Journal { get; set; }
        public string Identity { get; set; }
        public string Web { get; set; }
        public List<Article> Articles { get; set; }
    }
    public class Article
    {
        public string Link { get; set; }
        public int Pdf { get; set; }
    } 

在这里,我知道

Pdf
数字,例如
3789306
。它位于第一期第二篇文章。

所以我想获取父问题的 id

IssueId
。在我们的示例中
83719
。但我没能做到。

c# json.net
1个回答
1
投票

当您反序列化为

List<Issue>
时,通过 System.Linq 搜索包含
Pdf
的子级的父级将更容易实现,其值为 3789306。

对于

articleId
可能不存在的情况的处理,请使用
.FirstOrDefault()
和空条件运算符
(?.
)。

using System.Linq;

int articleId = 3789306;
int? issueId = issues.FirstOrDefault(x => x.Articles.Any(y => y.Pdf == articleId))
    ?.IssueId;
© www.soinside.com 2019 - 2024. All rights reserved.