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

最后返回效果:

 

转载于:https://www.cnblogs.com/Tassdar/p/11240776.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值