C# 下载配置数据

C# 下载配置数据,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我将一个应用程序附加到配置文件: { "ProjectModules": [ { "Version": "1", "LoginModule": { "LoginLogic": "Project1.ModulesV1.LoginModule.Logic.LoginLogic" } }, { "Version": "2", "LoginModule": { "LoginLogic"

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

{
  "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”

,如果不是不可能的话,那么用这种方式格式化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"
正如您所看到的,除了
ProjectModules
的索引相同之外,这里没有真正的方法来准确地告诉哪个版本属于哪个
LoginLogic
。然而,由于这只是一个字符串,在字典中充当一个键,因此您无法轻松筛选或搜索它

一个选择是,如果可以的话,稍微改变一下格式。例如,如果您使用类似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"

而且,很容易根据版本进行区分。

没有名为“
”的项目模块:“+moduleName
”-只有一个名为“
ProjectModules
”的部分。您从哪里获得
moduleName
,它是什么?什么是
sectionName
?@fredrik I添加在描述中