.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;
        }

最后返回效果:

 

posted @ 2019-07-24 20:51  Tassdar  阅读(2074)  评论(0编辑  收藏  举报