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

Dictionary<string,object>包含多数据类型对象的结构可行性及空引用异常问题求助

Dictionary<string,object>包含多数据类型对象的结构可行性及空引用异常问题求助

嘿,我来帮你梳理下这个问题的核心原因和解决方案!

首先,你遇到的空引用异常是因为JSON结构和代码里的类型转换不匹配导致的:
你的请求JSON里,configData是一个对象数组(格式是[{...}, {...}, {...}]),但你在控制器里尝试把它直接转成Dictionary<string,string>——这显然不对,数组没法直接转成单个字典,所以apiConfigData会变成null,当你去访问apiConfigData["filename"]的时候自然就抛出了“对象引用未设置到对象实例”的错误。

然后回答你的疑问:这种包含多数据类型对象的结构是完全可行的,只是你需要用正确的C#类型去匹配JSON的结构。

给你两种解决方案,按需选择:

方案一:使用强类型模型(推荐)

这种方式更清晰,也能避免类型转换的错误,还能获得IDE的智能提示。你可以先定义对应JSON结构的模型类:

// 对应configData里的单个对象
public class ConfigItem
{
    public string filename { get; set; }
    public string year { get; set; }
    public string month { get; set; }
}

// 对应unitData里的单个对象
public class UnitItem
{
    public int a { get; set; }
    public int b { get; set; }
    public string c { get; set; }
}

// 整个请求的根模型
public class AuditRequest
{
    public List<ConfigItem> configData { get; set; }
    public List<UnitItem> unitData { get; set; }
}

然后修改控制器方法,直接接收这个强类型模型:

public string createAuditRels([FromBody] AuditRequest apiData)
{
    // 从configData列表里获取filename(注意处理可能找不到的情况)
    var filename = apiData.configData?.FirstOrDefault(item => !string.IsNullOrEmpty(item.filename))?.filename;
    // 后续可以直接使用apiData.unitData里的各项数据
    // ... 你的业务逻辑
}

方案二:继续使用Dictionary<string, object>(适合临时场景)

如果你不想定义模型类,那需要正确识别configData的数组类型,把它转成字典的列表:

public string createAuditRels([FromBody] Dictionary<string,object> apiData)
{
    // 把configData转成List<Dictionary<string, string>>,而非单个Dictionary
    var apiConfigData = apiData["configData"] as List<Dictionary<string,string>>;
    // 找到包含filename键的字典项
    var filenameDict = apiConfigData?.FirstOrDefault(dict => dict.ContainsKey("filename"));
    // 安全获取filename值
    var filename = filenameDict?["filename"];
    // unitData同理,需转成List<Dictionary<string, object>>或对应强类型列表
    var unitData = apiData["unitData"] as List<Dictionary<string, object>>;
    // ... 你的业务逻辑
}

最后提醒下:使用强类型模型不仅能避免这类类型转换错误,还能让代码更易维护,后续修改JSON结构时也能快速调整对应模型,所以更推荐第一种方案哦!

备注:内容来源于stack exchange,提问作者João Gomes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:54:32