C#反序列化嵌套Dictionary结构JSON失败的问题求助
问题分析与解决
核心问题:JSON结构与C#类型不匹配
你的API返回的JSON是包含key和value属性的对象数组,但你指定的反序列化类型List<Dictionary<string, Dictionary<string, List<string>>>>要求数组中的每个元素是一个字典——字典的所有值都必须是Dictionary<string, List<string>>类型。但JSON里第一个元素的key字段对应的值是字符串"Activities",不是字典,这直接导致序列化器抛出类型转换异常。
解决方案
方案1:使用强类型类(推荐)
定义一个完全匹配JSON结构的类:
public class PermissionEntry { public string Key { get; set; } public Dictionary<string, List<string>> Value { get; set; } }
然后修改反序列化代码:
var res = await Http.GetAsync("api/endpoint"); var resBody = await res.Content.ReadAsStringAsync(); var permissionList = JsonSerializer.Deserialize<List<PermissionEntry>>(resBody);
方案2:动态类型(临时调试用)
如果不想定义类,可以先用List<Dictionary<string, object>>接收,再手动解析:
var tempList = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(resBody); // 手动提取key和value foreach (var item in tempList) { var key = item["key"] as string; var valueDict = JsonSerializer.Deserialize<Dictionary<string, List<string>>>(item["value"].ToString()); }
排查技巧
- 拆解JSON层级:先把JSON结构拆解清楚:
[
{ "key": 字符串, "value": { 字符串: [字符串列表] } }
] - 对齐类型层级:确保C#类型的每个层级都和JSON对应,不要用字典替代固定结构的对象。
- 工具生成类:在Visual Studio中,选中JSON内容右键→"粘贴特殊"→"粘贴JSON为类",自动生成匹配的C#类,避免手动写错结构。
内容的提问来源于stack exchange,提问作者LenaTW
相关产品推荐
相关产品推荐

