純コアIConfigurationは、ファイルJSONを処理するために使用します

数日前にCtripのオープンソース・コンフィギュレーション・センターを過ごすために会社:アポロ

私たちは、.NETのコアがappsetting.json来ているとき前に、検索で構成ツールに使用する現在の方法のコードとの互換性のために、あなたがセンターを設定する必要があるため、その後、私の同僚は、私にそのような質問を与えました形式で書かれたキー、[親:子ノード:子ノード]

Q.私は、既存の構成ファイルへの良い方法は、これに変換していない、または手動であまりにも激しいコピーされています。

だから私は、JSONのオペレーションコードにIConfigurationを使用して考え、次のとおりです。

IConfigurationによって次の子ノードを取得し続け、その後、再帰的に戻ります

DirectoryInfoルート= 新しいDirectoryInfo(パス)。
            FileInfo []ファイル =のroot.GetFiles()。
            foreachのVARのファイルのファイル)
            { 
                VARのビルダー= 新しいConfigurationBuilder()AddJsonFile(file.FullName)。
                VaRの設定= builder.Build()。
                VAR first_chilren = config.GetChildren()。
                VaRの KEY_VALUE =再帰(first_chilren、"" 真の);
                foreachのVARのアイテムKEY_VALUE)
                { 
                    場合(key_value_result.Any(X => x.key == item.key))
                    { 
                        続けます
                    }                            
                    key_value_result.Add(新しいDiffJson { 
                        キー = item.key、 = item.value、
                        FILE_NAME = file.Name 
                    })。
                } 
            }
 パブリック 静的のIEnumerable <JSON>再帰(IEnumerableを<IConfigurationSection>セクション、 PARENT_KEY、BOOL is_first)
        { 
            リスト <JSON>結果= 新しいリスト<JSON> ();
            foreachのVARの項目セクション)
            { 
                VAR chiilren = item.GetChildren()。
                文字列 currnet_key = "" ;
                もし(is_first)
                { 
                    currnet_key = $ " {item.Key} "; 
                } 
                
                { 
                    currnet_key = $ " {PARENT_KEY}:{item.Key} " ; 
                } 

                であれば(chiilren.Any())
                { 
                    result.AddRange(再帰(chiilren、currnet_key、))。
                } 
                もし(!ストリング.IsNullOrWhiteSpace(item.Value))
                { 
                    result.Add(新しいJSON 
                    { 
                        キー = currnet_key、= item.Value 
                    })。
                }              
            } 
            戻り値の結果; 
        }

そして最後に効果を返します。

 

おすすめ

転載: www.cnblogs.com/Tassdar/p/11240776.html