.Net Core使用IConfiguration來處理Json文件


前幾天公司的用上了攜程的開源配置中心:Apollo

然后同事給我提了這么個問題,因為之前的時候我們用的都是.NET Core自帶的appsetting.json,為了兼容代碼的目前工具類中用來進行配置搜索的方法,需要把配置中心的key寫成【 父節點:子節點:子節點】的形式

問我有沒有什么好的辦法把現有的配置文件都轉成這樣的,不然手動copy太費勁了。

於是我想到了使用IConfiguration來進行json的操作,代碼如下:

通過IConfiguration來不斷的獲取下一個子節點然后遞歸返回

DirectoryInfo root = new DirectoryInfo(path);
            FileInfo[] files = root.GetFiles();
            foreach (var file in files)
            {
                var builder = new ConfigurationBuilder().AddJsonFile(file.FullName);
                var config = builder.Build();
                var first_chilren = config.GetChildren();
                var key_value = Recursion(first_chilren, "", true);
                foreach (var item in key_value)
                {
                    if (key_value_result.Any(x => x.key == item.key))
                    {
                        continue;
                    }                           
                    key_value_result.Add(new DiffJson {
                        key=item.key,
                        value=item.value,
                        file_name=file.Name
                    });
                }
            }
 public static IEnumerable<Json> Recursion(IEnumerable<IConfigurationSection> section, string parent_key, bool is_first)
        {
            List<Json> result = new List<Json>();
            foreach (var item in section)
            {
                var chiilren = item.GetChildren();
                string currnet_key = "";
                if (is_first)
                {
                    currnet_key = $"{item.Key}";
                }
                else
                {
                    currnet_key = $"{parent_key}:{item.Key}";
                }

                if (chiilren.Any())
                {
                    result.AddRange(Recursion(chiilren, currnet_key, false));
                }
                if (!string.IsNullOrWhiteSpace(item.Value))
                {
                    result.Add(new Json
                    {
                        key = currnet_key,
                        value = item.Value
                    });
                }             
            }
            return result;
        }

最后返回效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM