netframework 读取appsettings.json

发布于:2025-03-06 ⋅ 阅读:(127) ⋅ 点赞:(0)

AppSettingsHelper:

using Newtonsoft.Json.Linq;
using System;
using System.IO;

public class AppSettingsHelper
{
    private static JObject _appSettings;

    static AppSettingsHelper()
    {
        try
        {
            // 获取 appsettings.json 文件的路径
            var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "appsettings.json");
            // 检查文件是否存在
            if (!File.Exists(filePath))
            {
                throw new FileNotFoundException("appsettings.json file not found!");
            }

            // 读取文件内容并解析为 JObject
            var json = File.ReadAllText(filePath);
            _appSettings = JObject.Parse(json);
        }
        catch (Exception ex)
        {
            throw new Exception($"Error loading appsettings.json: {ex.Message}");
        }
    }

    /// <summary>
    /// 获取指定键的值
    /// </summary>
    /// <param name="keyPath">键路径,例如 "AppSettings:Setting1"</param>
    /// <param name="defaultValue">默认值(可选)</param>
    /// <returns>键对应的值,如果键不存在则返回默认值</returns>
    public static string GetSetting(string keyPath, string defaultValue = null)
    {
        if (_appSettings == null)
        {
            throw new Exception("appsettings.json is not loaded.");
        }

        // 分割键路径
        var keys = keyPath.Split(':');
        JToken token = _appSettings;

        // 逐级查找键
        foreach (var key in keys)
        {
            token = token[key];
            if (token == null)
            {
                throw new Exception($"Key '{key}' in path '{keyPath}' not found.");
            }
        }
        return token.ToString();
    }

    /// <summary>
    /// 获取指定键的值并转换为指定类型
    /// </summary>
    /// <typeparam name="T">目标类型</typeparam>
    /// <param name="keyPath">键路径,例如 "AppSettings:Setting1"</param>
    /// <param name="defaultValue">默认值(可选)</param>
    /// <returns>键对应的值,如果键不存在则返回默认值</returns>
    public static T GetSetting<T>(string keyPath, T defaultValue = default)
    {
        if (_appSettings == null)
        {
            throw new Exception("appsettings.json is not loaded.");
        }

        // 分割键路径
        var keys = keyPath.Split(':');
        JToken token = _appSettings;

        // 逐级查找键
        foreach (var key in keys)
        {
            token = token[key];
            if (token == null)
            {
                throw new Exception($"Key '{key}' in path '{keyPath}' not found.");
            }
        }
        return token.ToObject<T>();
    }
}

appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"
  },
  "AppSettings": {
    "Setting1": "Value1",
    "Setting2": "Value2"
  }
}

output:

 class Program
 {
     static void Main(string[] args)
     {
         // 读取字符串类型的配置
         var setting1 = AppSettingsHelper.GetSetting("AppSettings:Setting1");
         Console.WriteLine($"Setting1: {setting1}");

         // 读取连接字符串
         var connectionString = AppSettingsHelper.GetSetting("ConnectionStrings:DefaultConnection");
         Console.WriteLine($"DefaultConnection: {connectionString}");

         // 读取并转换为特定类型(如果需要)
         var setting2 = AppSettingsHelper.GetSetting<string>("AppSettings:Setting2");
         Console.WriteLine($"Setting2: {setting2}");

         Console.ReadKey();
     }
 }


网站公告

今日签到

点亮在社区的每一天
去签到