You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:52:20