如何将C#中硬编码的Dictionary<string,string>映射改为从文件读取
实现步骤
1. 新增配置文件
在解决方案根目录新增JSON格式的配置文件,命名为ProjectCustomerMapping.json,内容和原有硬编码的映射关系对应:
{ "Lara": "Lara", "Tiger": "Lara", "Panther": "Lara", "Dice": "Dara", "bird": "Dara" }
配置文件创建完成后右键文件→属性,做两项设置:
- 生成操作选择「内容」
- 复制到输出目录选择「如果较新则复制」
确保程序运行时可以正常读取到该文件。
2. 编写配置读取逻辑
不用修改原有业务查询代码,只需要把原来硬编码的字典初始化改成从文件读取反序列化即可,.NET Core 3.0+/NET 5+ 可以直接用自带的System.Text.Json处理,不用额外安装第三方包;如果是.NET Framework环境可以替换为Newtonsoft.Json(Json.NET)实现反序列化。
修改后的字典定义和读取代码如下:
using System.IO; using System.Text.Json; // 原有字典改成从配置加载 public static Dictionary<string, string> projectCustomerNameMapping = LoadMappingConfig(); // 配置读取方法 private static Dictionary<string, string> LoadMappingConfig() { try { var configPath = Path.Combine(AppContext.BaseDirectory, "ProjectCustomerMapping.json"); var jsonContent = File.ReadAllText(configPath); return JsonSerializer.Deserialize<Dictionary<string, string>>(jsonContent) ?? new Dictionary<string, string>(); } catch { // 配置加载失败时返回兜底映射,避免程序直接崩溃 return new Dictionary<string, string>() { {"Lara","Lara" }, {"Tiger","Lara" }, {"Panther","Lara" }, {"Dice","Dara" }, {"bird","Dara" } }; } }
如果使用Newtonsoft.Json,只需要把反序列化代码替换为JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonContent)即可。
3. 验证运行
因为最终生成的还是Dictionary<string, string>结构,你原来的匹配获取客户名称的代码不需要做任何调整,直接运行即可生效,后续修改映射关系只需要改配置文件,不需要重新编译代码。
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

