C#中Dictionary可见对应Key却无法访问,该如何排查解决?
问题根因定位
- 核心触发原因:你调用
data.Split('}')拆分用户条目时,若原返回数据末尾以}结尾,拆分后数组最后一个元素为空字符串,遍历到该空条目时生成的字典没有任何键,访问键时自然抛出不存在错误。你看到的Trace输出是前面有效条目的结果,报错实际是遍历到最后一个空条目时触发的。 - 其他潜在原因:
- 你清洗数据时只移除了空格、
{、",没有处理JSON中常见的换行、回车、制表符等不可见字符,导致字典的键实际携带了看不到的控制字符,和你输入的individualID不匹配。 - 拆分后的非首个
individual条目开头可能携带多余逗号,导致键名前缀带逗号,无法匹配。 - 你测试键存在性时用的是全大写的
INDIVIDUALID,和实际驼峰格式的键名不匹配,自然返回False。
- 你清洗数据时只移除了空格、
修复方案
- 首先过滤空的拆分条目,遍历前先做空值判断:
foreach (var individual in guys) { // 新增:跳过空/空白条目 if(string.IsNullOrWhiteSpace(individual)) continue; // 原有逻辑 }
- 完善字符清洗规则,把常见不可见字符加入移除列表:
var charsToRemove = new string[] { "{", "\"", " ", "\r", "\n", "\t"};
- 生成字典时对键值做Trim处理,消除残留的多余字符:
var uDict = individual.Split(',') .Select(part => part.Split(':')) .Where(part => part.Length == 2) .ToDictionary(sp => sp[0].Trim(), sp => sp[1].Trim());
- 长期优化建议:不要自行暴力拆分JSON字符串,只要返回值中出现逗号、冒号就会导致解析错误,建议使用
System.Text.Json或Newtonsoft.Json等标准JSON解析库处理返回数据,稳定性更高。
内容的提问来源于stack exchange,提问作者Nathan Elkind
相关产品推荐
相关产品推荐

