You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过子节点Pdf值获取JSON中父节点IssueId(Json.Net实现)

实现通过PDF编号查找所属Issue的IssueId

下面提供几种适配你现有代码结构的解决方案:

方法1:基础遍历查找(无需修改类结构)

直接遍历已反序列化的List<Issue>,逐个检查每个Issue下的文章是否匹配目标PDF编号:

int targetPdf = 3789306;
int? matchedIssueId = null;

foreach (var issue in issues)
{
    var targetArticle = issue.Articles.FirstOrDefault(article => article.Pdf == targetPdf);
    if (targetArticle != null)
    {
        matchedIssueId = issue.IssueId;
        break;
    }
}

// 使用结果
if (matchedIssueId.HasValue)
{
    Console.WriteLine($"匹配的IssueId:{matchedIssueId.Value}");
}
else
{
    Console.WriteLine("未找到对应PDF编号的文章");
}

方法2:LINQ简化写法

用LINQ链式调用实现更简洁的查找逻辑:

int targetPdf = 3789306;
int? matchedIssueId = issues
    .FirstOrDefault(issue => issue.Articles.Any(article => article.Pdf == targetPdf))
    ?.IssueId;

// 输出结果
Console.WriteLine(matchedIssueId.HasValue ? $"匹配的IssueId:{matchedIssueId.Value}" : "无匹配项");

方法3:添加父引用(适合频繁查询场景)

如果需要多次根据文章查找所属Issue,可修改类结构添加父引用,提升后续查询效率:

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; } = new List<Article>();

    // 反序列化后初始化父引用
    [JsonIgnore]
    public void SetArticleParentReferences()
    {
        foreach (var article in Articles)
        {
            article.ParentIssue = this;
        }
    }
}

public class Article
{
    public string Link { get; set; }
    public int Pdf { get; set; }
    [JsonIgnore] // 避免序列化该属性
    public Issue ParentIssue { get; set; }
}

反序列化后初始化引用,后续查询直接通过文章对象获取IssueId:

var issues = JsonConvert.DeserializeObject<List<Issue>>(jsonString);
foreach (var issue in issues)
{
    issue.SetArticleParentReferences();
}

// 查找目标文章并获取IssueId
int targetPdf = 3789306;
var targetArticle = issues.SelectMany(issue => issue.Articles)
                          .FirstOrDefault(article => article.Pdf == targetPdf);
if (targetArticle != null)
{
    Console.WriteLine($"匹配的IssueId:{targetArticle.ParentIssue.IssueId}");
}

内容的提问来源于stack exchange,提问作者Sarper Sözen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:17:27