zoukankan      html  css  js  c++  java
  • .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;
            }

    最后返回效果:

  • 相关阅读:
    剑指offer-用两个栈实现队列
    Java数组判空的正确打开方式
    浏览器输入URL后后的过程
    HTTP状态码
    HTTP和HTTPS
    北京好未来公司linux面试题
    三剑客 -- sed
    三剑客 -- grep
    shell脚本
    自动化 -- expect
  • 原文地址:https://www.cnblogs.com/Tassdar/p/11240776.html
Copyright © 2011-2022 走看看