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

使用Newtonsoft Json.NET反序列化Reddit接口返回的复杂JSON数据

基于Newtonsoft Json.NET反序列化Reddit接口复杂JSON的实现方案

你可以按照以下步骤完成复杂结构的反序列化:

步骤1:分层定义对应C#实体类

Reddit的热帖接口返回结构为固定的三层嵌套结构,你可以按需定义需要用到的字段即可,无需映射所有JSON节点:

using Newtonsoft.Json;
using System.Collections.Generic;

// 最外层根对象
public class RedditRoot
{
    [JsonProperty("kind")]
    public string Kind { get; set; }

    [JsonProperty("data")]
    public RedditRootData Data { get; set; }
}

// 根节点下的分页、列表包裹层
public class RedditRootData
{
    [JsonProperty("after")]
    public string NextPageToken { get; set; }

    [JsonProperty("children")]
    public List<RedditPostItem> PostList { get; set; }

    [JsonProperty("dist")]
    public int PostCount { get; set; }
}

// 单个帖子的外层包裹
public class RedditPostItem
{
    [JsonProperty("kind")]
    public string PostType { get; set; }

    [JsonProperty("data")]
    public RedditPostCore PostInfo { get; set; }
}

// 帖子核心数据,按需补充需要的字段即可
public class RedditPostCore
{
    [JsonProperty("title")]
    public string Title { get; set; }

    [JsonProperty("author")]
    public string Author { get; set; }

    [JsonProperty("ups")]
    public int UpVoteCount { get; set; }

    [JsonProperty("selftext")]
    public string PostContent { get; set; }

    [JsonProperty("created_utc")]
    public long PublishTimestamp { get; set; }
}

步骤2:执行反序列化操作

拿到接口返回的完整JSON字符串后,直接调用Json.NET的反序列化方法即可:

// 入参jsonStr为从接口请求获取的完整JSON字符串
RedditRoot tf2HotResult = JsonConvert.DeserializeObject<RedditRoot>(jsonStr);

// 直接遍历使用数据即可
foreach (var post in tf2HotResult.Data.PostList)
{
    Console.WriteLine($"标题:{post.PostInfo.Title},作者:{post.PostInfo.Author},点赞数:{post.PostInfo.UpVoteCount}");
}

注意事项

  • 无需完整定义JSON的所有字段,仅需声明你业务中需要用到的字段即可,未声明的字段Json.NET会自动跳过,不会抛出异常
  • 若JSON字段名与C#类的属性名不一致,必须通过[JsonProperty("原始字段名")]特性做映射,否则会出现字段值为默认空的问题
  • 若仅需要提取部分嵌套数据,也可以先用JObject.Parse(jsonStr)解析为动态对象,直接定位到目标节点后再反序列化为强类型,减少冗余类的定义:
    // 示例:直接提取帖子列表,不用定义完整根类
    JObject root = JObject.Parse(jsonStr);
    List<RedditPostItem> postList = root["data"]["children"].ToObject<List<RedditPostItem>>();
    

内容的提问来源于stack exchange,提问作者wholesomedev4

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:24:05