C#反序列化JSON为dynamic后如何获取users节点下所有子键名
枚举JSON dynamic节点键名的实现方法
现有基础信息
- 待处理的JSON文件结构如下:
{ "users": { "xyz ": { "Name": "abc " }, "x ": { "Name": "xy " }, "abc": { "Name": "ijk" } } }
- 当前使用的反序列化代码:
dynamic keys = JsonConvert.DeserializeObject(File.ReadAllText(path));
- 目标需求:提取
users节点下所有子键,清理键名首尾的多余空格后,得到如下输出
xyz x abc
具体实现代码
Json.NET反序列化无类型声明的JSON对象时,得到的dynamic实例实际是JObject类型,直接将users节点显式转换为JObject后,遍历其属性集合即可拿到所有键名,再做空格清理就能得到目标结果:
using Newtonsoft.Json.Linq; // 原有反序列化逻辑 dynamic keys = JsonConvert.DeserializeObject(File.ReadAllText(path)); // 提取users节点下的所有键名 JObject usersSection = (JObject)keys.users; IEnumerable<string> cleanedKeyNames = usersSection .Properties() .Select(property => property.Name.Trim()); // 移除键名首尾多余空格 // 遍历输出结果 foreach (string key in cleanedKeyNames) { Console.WriteLine(key); }
注意- 不要尝试直接用普通字典遍历语法操作未声明类型的dynamic对象,很容易触发运行时绑定异常,显式转换为JObject是兼容性最高的处理方式
- 原JSON中
xyz、x两个键末尾带有多余空格,调用Trim()处理即可匹配需要的输出格式
内容的提问来源于stack exchange,提问作者Varun V Gowda
相关产品推荐
相关产品推荐

