gpt4 book ai didi

c# - 使用 appsettings.Production.json 中的数组设置覆盖 appsettings.json 中的数组设置

转载 作者:太空狗 更新时间:2023-10-29 20:58:09 27 4
gpt4 key购买 nike

我正在使用 ASP.NET Core 2.1。我在 appsettings.json 中有设置我使用选项模式将它们绑定(bind)到类。我想在 appsettings.Production.json 中覆盖其中一些。

根据文档支持覆盖,并且通常对我有用。但它不适用于数组。

appsettings.json:

"MySectionOuter": {
"MySectionInner": [
{
"foo": "1",
"bar": "2",
"baz": "3"
},
{
"foo": "a",
"bar": "b",
"baz": "c"
}
]
}

我在 appsettings.Production.json 中覆盖

"MySectionOuter": {
"MySectionInner": [
{
"bar": "4",
},
{
"baz": "d"
}
]
}

但这不起作用 - 它添加而不是替换。

read that数组是键值存储的语法糖。所以我也试过这个:

"MySectionOuter": {
"MySection:1": {
"bar": "4",
},
"MySection:2": {
"baz": "b",
}
}

但这也行不通。

正确的语法是什么?

更新

评论显示我没有正确解释。我想要的是这样的:

开发期间:

element1: foo=1
element1: bar=2
element1: baz=3
element2: foo=a
element2: bar=b
element2: baz=c

在生产过程中:

element1: foo=1
element1: bar=2
element1: baz=4 // this was changed
element2: foo=a
element2: bar=b
element2: baz=d // this was changed

最佳答案

事实上,构建配置时那里并没有数组。它只是一个键值对字典。所以你最终得到了字符串键,比如"mysectionouter:mysectioninner:0:foo"= 1

因此,当您在配置中定义一个数组时,会发生以下情况:

应用设置.json:

"mysectionouter:mysectioninner:0:foo" = 1
"mysectionouter:mysectioninner:0:bar" = 2

appsettings.production.json:

"mysectionouter:mysectioninner:0:bar" = new1

结果:

foo = 1
bar = new1

所以它只是基于索引,接下来的配置只是覆盖一个键。在您的第二个示例中,除了更改索引外,您一无所获。代表将是:

"mysectionouter:mysectioninner:1:bar" = new1

所以回到你的问题:数组在应用程序设置中很棘手,虽然支持,但通常很难使用且不直观。

通过索引,你可能会得到两个不相关对象的奇怪合并,如果你在你的文件中定义不同的设置集,比如第一个配置中的设置 A 和 B,第二个配置中的 C,你将得到 C 和 B结果,您可能根本不想拥有 B。更糟糕的是,如果您只定义每个对象的某些字段,您可能会混合使用 A 和 C。

我建议使用其他一些文件来存储此类信息。您还可以在加载配置的地方中断调试器,亲眼看看这些 key 是如何构建的,以获得更多洞察力。

关于c# - 使用 appsettings.Production.json 中的数组设置覆盖 appsettings.json 中的数组设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52755027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com