c# 使用.yaml 配置文件

废话不多说,上教程。🤩


1.安装 nuget包 YamlDotNet

2.新建appsettings.yaml 配置文件

3.读取appsettings.yaml

string yaml = File.ReadAllText("appsettings.yaml");
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance) //使用驼峰命名约定
.Build()
var config = deserializer.Deserialize<Dictionary<string, object>>(yaml);
var value_obj = config["AppSettings"];
Console.WriteLine(value_obj);

4.封装读取.yaml文件方法

public static class ConfigTool
{
private readonly static string yaml = File.ReadAllText("appsettings.yaml");
private static Dictionary<string, object> originalConfig = new Dictionary<string, object>();
public static IDeserializer GetDeserializer()
{
return new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance) //使用驼峰命名约定
.Build();
}
/// <summary>
/// 获取最新的配置信息,热更新
/// </summary>
/// <returns></returns>
public static Dictionary<string, object> GetConfigDic()
{
var pathYaml = File.ReadAllText("appsettings.yaml");
var deserializer = GetDeserializer();
//Dictionary<string,object> originalConfig = new Dictionary<string,object>();
var config = deserializer.Deserialize<Dictionary<string, object>>(yaml);
foreach (var key in config.Keys)
{
originalConfig[key] = config[key];
}
return originalConfig;
}
/// <summary>
/// 获取appsettings value
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static dynamic GetValue(string keys)
{
//var yaml = File.ReadAllText("appsettings.yaml");
var deserializer = GetDeserializer();
var config = deserializer.Deserialize<Dictionary<string, object>>(yaml);
object current = null;
try
{
var key_list = keys.Split(':');
current = config[key_list[0]];
key_list[0] = "";
foreach (var key in key_list)
{
if (string.IsNullOrEmpty(key)) continue;
if (current is IDictionary<object, object> subDict && subDict.TryGetValue(key, out object value))
current = value;
}
return ConverObject(current);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 转换类型
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static dynamic ConverObject(dynamic obj)
{
if (obj is IEnumerable<object> objects)
{
return new List<object>(objects);
}
else if (obj is IDictionary<object, object> enumerable)
{
return enumerable;
}
else return obj;
}
}

5.使用方式

var Urls = ConfigTool.GetValue("Urls");
Console.WriteLine(Urls[0]); // https://baidu.com
var logLevel = ConfigTool.GetValue("Logging:LogLevel");
Console.WriteLine(logLevel["Default"]); // Information
var MaxRetries = ConfigTool.GetValue("AppSettings:MaxRetries");
Console.WriteLine(MaxRetries); // 5

到这里就🎉🎉🎉大功告成了!🎉🎉🎉 你学废了吗😀
posted @   浅·笑  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示