C# 读取json配置文件appsettings.json
添加NuGet包
Microsoft.Extensions.Configuration.FileExtensions;
Microsoft.Extensions.Configuration.Json;
appsettings.json示例
代码:
public static void GetBuilder(string path) { var builder = new ConfigurationBuilder() //设置文件放置路径 .SetBasePath(path) //appsettings.json,复制一份放在程序集目录下 .AddJsonFile(appsettings, optional: true, reloadOnChange: true); var configuration = builder.Build(); var connectionStr = configuration.GetConnectionString("Default")!;//数据库默认字符串的独特方式获取 var num = int.Parse(configuration.GetSection("Log:LogLevel").Value!);//方式一,通过":"来表示层级获取数据 var str = configuration.GetSection("Log").GetSection("LogPath").Value!;//方式二,直接通过叠加使用GetSection()来表示层级获取数据
}
完整示例
public static class AppConfigurations
{ private const string appsettings = "appsettings.json"; public static readonly ConcurrentDictionary<string, IConfigurationRoot> ConfigurationCache; public static string ConnectionString { get; set; }
public static string LogPath{ get; set; } public static int LogLevel{ get; set; } static AppConfigurations() { ConfigurationCache = new ConcurrentDictionary<string, IConfigurationRoot>(); ConnectionString = Get(Directory.GetCurrentDirectory()).GetConnectionString("Default")!;
LogLevel= int.Parse(Get(Directory.GetCurrentDirectory()).GetSection("Log:LogLevel").Value!);
LogPath= Get(Directory.GetCurrentDirectory()).GetSection("Log").GetSection("LogPath").Value!;
} public static IConfigurationRoot Get(string path) { var cacheKey = path; return ConfigurationCache.GetOrAdd( cacheKey, _ => GetBuilder(path) ); } public static IConfigurationRoot GetBuilder(string path) { var builder = new ConfigurationBuilder() //设置文件放置路径 .SetBasePath(path) //appsettings.json,复制一份放在程序集目录下 .AddJsonFile(appsettings, optional: true, reloadOnChange: true); return builder.Build(); } }
注:运行时始终读不到配置抛出异常
原因是:配置文件没有复制成功到程序集目录下,没有成功的原因是配置文件的属性"复制到输出目录"值是不复制,此属性的值应改为,始终复制或者如果较新则复制,此处选择的是如果较新则复制(源文件有更新则重新复制)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2022-08-04 html中嵌入.html的文件,使用iframe
2022-08-04 关于js调用ts中某些属性