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

C#中使用Newtonsoft.Json统计JSON对象数量的解决方案问询

解决方案

你当前的实体类设计不符合JSON的结构特性:JSON顶层是键为动态数字、值结构完全统一的对象,不需要为每个数字键单独定义类,更不用硬编码到Root类中,否则后续新增应用还需要同步修改实体类,可维护性极差。

步骤1:统一定义应用项实体类

所有子对象的结构完全一致,只需要定义一个通用实体类即可:

public class AppItem
{
    [JsonProperty("App Name")]
    public string AppName { get; set; }

    [JsonProperty("App Icon")]
    public string AppIcon { get; set; }

    [JsonProperty("App Link")]
    public string AppLink { get; set; }

    public string Category { get; set; }
}

步骤2:选择适配的反序列化方案

方案1:直接反序列化为字典(最简便)

直接将JSON顶层反序列化为Dictionary<string, AppItem>,原生自带Count属性可以直接拿到对象总数:

// 注意文件路径前加@避免转义字符报错
var json = File.ReadAllText(@"D:\AppJson.json"); 
var appDictionary = JsonConvert.DeserializeObject<Dictionary<string, AppItem>>(json);

// 直接获取对象总数
int totalCount = appDictionary.Count;
// 也可以通过数字键直接访问对应应用,比如获取编号为2的应用信息
var app = appDictionary["2"];
方案2:封装Root类满足Root.Count调用要求

如果需要保留Root类的封装形式,可以让Root类继承字典,无需额外实现就能直接使用Count属性:

public class Root : Dictionary<string, AppItem>
{
    // 可在此处添加其他自定义属性
}

反序列化和调用方式如下:

var json = File.ReadAllText(@"D:\AppJson.json"); 
var root = JsonConvert.DeserializeObject<Root>(json);
// 直接通过Count属性拿到总数
int totalCount = root.Count;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:00:03