无法从REST GET请求的JsonArray中读取name字段值,求解决方法
修正方案
1. 修正实体类与反序列化逻辑
你的API返回的是直接的对象数组,不存在外层MyArray嵌套结构,因此不需要定义Root类,直接用对应实体类反序列化即可:
using Newtonsoft.Json; using System.Collections.Generic; public class Program { public static void Main() { // myJsonResponse为API返回的JSON字符串 var tagList = JsonConvert.DeserializeObject<List<DeviceTag>>(myJsonResponse); // 获取第一个元素的name值 if (tagList != null && tagList.Count > 0) { string targetName = tagList[0].Name; // 遍历所有元素的name foreach (var tag in tagList) { System.Console.WriteLine(tag.Name); } } } } // 类名建议贴合业务场景,按需添加需要的字段 public class DeviceTag { [JsonProperty("id")] public string Id { get; set; } [JsonProperty("name")] public string Name { get; set; } // 如需其他字段,直接添加对应属性即可,示例: [JsonProperty("type")] public string Type { get; set; } }
2. 无需实体类的简化访问方法
如果只是临时获取name字段,不想定义实体类,可以用以下两种方式:
方法一:使用dynamic动态类型
using Newtonsoft.Json; public class Program { public static void Main() { dynamic tagArray = JsonConvert.DeserializeObject(myJsonResponse); string firstTagName = tagArray[0].name; // 遍历所有name foreach (var tag in tagArray) { System.Console.WriteLine(tag.name); } } }
方法二:使用JArray解析(Newtonsoft.Json.Linq)
using Newtonsoft.Json.Linq; public class Program { public static void Main() { JArray tagArray = JArray.Parse(myJsonResponse); string firstTagName = tagArray[0]["name"].ToString(); // 遍历所有name foreach (JObject tag in tagArray) { System.Console.WriteLine(tag["name"].ToString()); } } }
错误原因说明
你之前定义的Root类额外增加了MyArray嵌套字段,但实际API返回的JSON没有这一层结构,导致反序列化后的对象无法正确映射数据,自然无法访问name字段。
内容的提问来源于stack exchange,提问作者DaveR
相关产品推荐
相关产品推荐

