热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用appsettings.Production.json中的数据覆盖appsettings.json中的数组设置

如何解决《使用appsettings.Production.json中的数据覆盖appsettings.json中的数组设置》经验,为你挑选了1个好方法。

我正在使用ASP.NET Core 2.1.我有设置,appsettings.json并使用选项模式将它们绑定到类.我想覆盖它们中的一些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"
    }
  ]
}

然而,这不起作用 - 它增加而不是替换.

我读到该数组是键值存储的语法糖.所以我也试过这个:

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

但这也行不通.

什么是正确的语法?

UPDATE

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

在开发期间:

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

Maxim Zabolo.. 10

实际上,构建配置时没有阵列.它只是一个键值对字典.所以你最终得到了字符串键,类似于 "mysectionouter:mysectioninner:0:foo" = 1.

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

appsettings.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

回到你的问题:数组在appsettings中很棘手,虽然支持,但通常很难并且不直观.

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

我建议使用其他一些文件来存储这类信息.您还可以在配置加载的位置打破调试器,并亲自查看这些键是如何构建的,以获得更多洞察力.



1> Maxim Zabolo..:

实际上,构建配置时没有阵列.它只是一个键值对字典.所以你最终得到了字符串键,类似于 "mysectionouter:mysectioninner:0:foo" = 1.

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

appsettings.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

回到你的问题:数组在appsettings中很棘手,虽然支持,但通常很难并且不直观.

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

我建议使用其他一些文件来存储这类信息.您还可以在配置加载的位置打破调试器,并亲自查看这些键是如何构建的,以获得更多洞察力.


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
author-avatar
C_z和
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有