下载配置数据

时间:2019-07-25 11:54:36

标签: c# asp.net-core .net-core

我有一个附加到配置文件的应用程序:

{
  "ProjectModules": [
    {
      "Version": "1",
      "LoginModule": {
        "LoginLogic": "Project1.ModulesV1.LoginModule.Logic.LoginLogic"
      }
    },
    {
      "Version": "2",
      "LoginModule": {
        "LoginLogic": "Project1.ModulesV2.LoginModule.Logic.LoginLogic"
      }
    }
  ]
}

如何获取“ LoginLogic”键和特定版本的值?

我在这里开始做,但是没有考虑到它是数据表

if (_configuration.GetSection("ProjectModules:" + moduleName).Exists())
{
    var configSection = _configuration.GetSection("ProjectModules:" + moduleName);

    if (configSection[sectionName] != null)
    {
        part = configSection[sectionName];
    }
}

编辑:

  • moduleName-> LoginModule
  • sectionName-> LoginLogic

我需要知道"LoginLogic"版本的"Version"键的值

1 个答案:

答案 0 :(得分:1)

要用这种格式格式化的JSON来完成您想做的事情将非常困难,即使不是不可能。您需要了解配置系统的工作方式。无论什么配置源(JSON,环境变量,控制台参数等),一切,我的意思是一切最终都被转储到字典中。配置提供程序的全部责任几乎就是获取源并将其转换为字典,然后将其返回并合并到主配置字典中。

因此,您在此处实际创建的是:

["ProjectModules[0]:Version"] = 1
["ProjectModules[0]:LoginModule:LoginLogic"] = "Project1.ModulesV1.LoginModule.Logic.LoginLogic"
["ProjectModules[1]:Version"] = 2
["ProjectModules[1]:LoginModule:LoginLogic"] = "Project1.ModulesV2.LoginModule.Logic.LoginLogic"

如您所见,除了LoginLogic的索引相同之外,这里没有真正的方法可以确切地说出哪个版本属于哪个ProjectModules。但是,由于这只是字典中用作键的字符串,因此您不能轻易对其进行过滤或搜索。

如果可以的话,一个选项是稍微更改格式。例如,如果您使用的是JSON之类的

{
  "ProjectModules": {
    "Version1": {
      "LoginModule": {
        "LoginLogic": "Project1.ModulesV1.LoginModule.Logic.LoginLogic"
      }
    },
    "Version2": {
      "LoginModule": {
        "LoginLogic": "Project1.ModulesV1.LoginModule.Logic.LoginLogic"
      }
    }
 }

}

然后,您将得到:

["ProjectModules:Version1:LoginModule:LoginLogic"] = "Project1.ModulesV1.LoginModule.Logic.LoginLogic"
["ProjectModules:Version2:LoginModule:LoginLogic"] = "Project1.ModulesV2.LoginModule.Logic.LoginLogic"

而且,按版本区分是很容易的。