C#中如何使用变量作为键获取JSON动态对象的属性值
解决方案
你可以通过Newtonsoft.Json提供的JObject索引器或者SelectToken方法实现变量作为属性名取值的需求,这种方式也适配JSON动态新增节点的场景。
代码实现(兼容现有写法)
using Newtonsoft.Json.Linq; using System.Net; // 你需要传入的变量,值为"Person1"、"Person2"或者其他动态新增的节点名 string targetPerson = "Person1"; WebClient client = new WebClient(); string list = client.DownloadString("https://linkto.json"); // 反序列化为JObject而非dynamic JObject json = JObject.Parse(list); // 通过变量作为键取值 string var2 = json[targetPerson][0]["image"].ToString();
更安全的写法(避免不存在的属性/数组为空引发异常)
使用SelectToken方法,路径不存在时会返回null,不会直接抛出运行时异常:
// 前面的请求逻辑不变 JObject json = JObject.Parse(list); string var2 = json.SelectToken($"{targetPerson}[0].image")?.ToString(); // 后续可自行判断var2是否为null做兼容处理
补充说明
WebClient已在.NET Core 2.1及以上版本标记为过时,推荐使用HttpClient进行网络请求,性能和安全性更好。- 如果坚持要使用dynamic语法实现,也可以通过
json.GetType().GetProperty(variable).GetValue(json, null)的反射方式取值,但该方式性能更低、异常处理更麻烦,不推荐使用。
内容的提问来源于stack exchange,提问作者MrCoolAndroid
相关产品推荐
相关产品推荐

