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

    最后返回效果:

  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/Tassdar/p/11240776.html
Copyright © 2011-2022 走看看