我需要读取多个配置文件(所有JSON)。文件内容在结构上相同。例如
alice.json
{ "Name": "Alice" }
bob.json
{ "Name": "Bob" }
我应该如何将它们全部加载到IConfiguration
中而又不能相互覆盖?我可以告诉框架将它们放在与文件名匹配的部分中吗?
答案 0 :(得分:2)
您想要的东西是不可能的。按照注册配置提供程序的顺序依次加载配置,并且每个后续源均覆盖任何先前的源。实现类似您想要的东西的唯一方法是在JSON中进行实际设置,即:
alice.json
{
"alice.json": {
"Name": "Alice"
}
}
bob.json
{
"bob.json": {
"Name": "Bob"
}
}
答案 1 :(得分:1)
我认为这不是IConfiguration
的最佳选择。配置是专门为分层各种配置源而设计的,其中键覆盖了其他键-这是设计使然。
您可能想跳出配置,直接使用JSON序列化程序处理这些问题,并合并结果对象。
public class Person
{
public string Name { get; set; }
}
public class People
{
public string[] Names { get; set; }
}
public static People LoadPeople(string[] personJson)
=> new People
{
Names = JsonConvert.Deserialize<Person>(personJson).Select(p => p.Name).ToArray()
};