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
相关产品推荐
相关产品推荐

