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
到这里就🎉🎉🎉大功告成了!🎉🎉🎉 你学废了吗😀
本文来自博客园,作者:浅·笑,转载请注明原文链接:https://www.cnblogs.com/qx-blog/p/18632758
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端