.NET Core 5中如何读取appsettings.json指定部分的原始字符串?
实现方案
你可以根据自己的使用场景选择以下两种常用实现方式:
方案1:将目标配置段作为转义字符串存储
- 先把需要存放的Google服务账号JSON内容整体转义为字符串,直接作为
appsettings.json的独立键值,示例配置如下:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "GoogleServiceAccount": "{\"type\":\"service_account\",\"project_id\":\"你的项目ID\",\"private_key_id\":\"xxx\",...}" }
- 读取时直接通过默认的
IConfiguration接口取值即可,代码示例:
// 直接获取未经过额外解析的原始字符串 var googleServiceAccount = builder.Configuration.GetValue<string>("GoogleServiceAccount");
- 该方案实现成本极低,无需额外逻辑处理;缺点是配置存放时需要先转义JSON,配置本身的可读性稍差。
方案2:直接读取配置文件提取目标段原始文本
- 如果你希望保持
appsettings.json里的JSON嵌套结构、不想做转义,可以直接读取配置文件的原始文本,再提取对应节点的完整JSON内容,示例代码如下:
// 适配多环境配置读取逻辑 var env = builder.Environment; var configPath = Path.Combine(env.ContentRootPath, $"appsettings.{env.EnvironmentName}.json"); if (!File.Exists(configPath)) { configPath = Path.Combine(env.ContentRootPath, "appsettings.json"); } // 读取配置文件原始文本 var configRawText = File.ReadAllText(configPath); // 解析为JsonNode后提取目标节点的原始JSON字符串 var rootNode = System.Text.Json.Nodes.JsonNode.Parse(configRawText); var googleServiceAccount = rootNode["GoogleServiceAccount"].ToJsonString();
- 该方案可以保留配置的原生嵌套结构,可读性更好;缺点是需要自己处理多环境配置的文件读取逻辑。
如果有大量同类需要读取原始文本的配置场景,也可以自定义配置提供器实现通用的读取逻辑,常规场景以上两种方案已经足够覆盖需求。
内容的提问来源于stack exchange,提问作者Marius Kazlauskas
相关产品推荐
相关产品推荐

