C#控制台应用Web JSON反序列化及foreach循环问题求助
问题解决方法
1. 修正实体类定义
JSON中的roles是数组类型,你的RolesJson类里把它定义成了单个Roles对象,类型不匹配导致无法正确反序列化。修改后的实体类:
namespace SomeNamespace { public class Role // 类名用单数更贴合单个角色的语义 { [JsonProperty("name")] public string Name { get; set; } // 属性名采用C#规范的PascalCase格式 } public class RolesJson { [JsonProperty("roles")] public List<Role> Roles { get; set; } // 用List<Role>对应JSON中的数组结构 } }
2. 用自定义类反序列化并读取目标字段
替换原有的JObject解析逻辑,直接将JSON反序列化为自定义类对象,然后遍历读取单个字段:
var outputString = await response.Content.ReadAsStringAsync(); // 反序列化为自定义类实例 var rolesJson = JsonConvert.DeserializeObject<RolesJson>(outputString); // 遍历角色数组,读取指定字段(比如name) foreach (var role in rolesJson.Roles) { Console.WriteLine($"角色名称:{role.Name}"); // 如果需要读取其他字段,只需在Role类中添加对应属性即可,例如: // [JsonProperty("oid")] // public string Oid { get; set; } // 之后直接访问role.Oid即可 }
3. 原foreach循环问题说明
你之前用foreach (JObject jo in stuff["roles"])能临时运行,但本质是绕开了强类型解析。修正实体类后,直接遍历List<Role>即可,无需嵌套循环就能精准获取目标字段,同时避免类型不匹配带来的异常。
内容的提问来源于stack exchange,提问作者Adam Mohammed Dabdoub
相关产品推荐
相关产品推荐

