Asp.net core 将.NET核心配置节数组绑定到类或列表<;类别>;

Asp.net core 将.NET核心配置节数组绑定到类或列表<;类别>;,asp.net-core,appsettings,Asp.net Core,Appsettings,我认为在配置文件中定义错误报告的数据会很有用,比如errordefinitions.json: { "errorDefinitions": { "unsupportedExtension": { "errorLevel": 2, "doLog": true, "logMessage": "The file {0} doesn't have

我认为在配置文件中定义错误报告的数据会很有用,比如errordefinitions.json:

{
  "errorDefinitions": {
    "unsupportedExtension": {
      "errorLevel": 2,
      "doLog": true,
      "logMessage": "The file {0} doesn't have a valid extension for this operation.",
      "doEmail": false,
      "emailSubject": "",
      "emailBody": ""
    },
    "fileOpenFailed": {
      "errorLevel": 3,
      ...
    }
  }
}

无论哪种方式,我的期望都是能够使用Microsoft内置的配置管理类来定义一个类,然后相当直接地将一个类或类中的项目列表绑定到这些类,以便我可以引用它们:

UPDATE自从我第一次发布以来,我扩展了下面的示例,以更清楚地展示我的想法。我希望能够根据错误定义的名称查找和使用错误定义,而不必将每个定义封装在单独的类中。字典本质上是一个应用程序,在语义上不知道错误定义的含义每个条目

当我向应用程序添加新功能时,我希望能够将新功能可能遇到的任何新错误的数据添加到配置文件中,并通过名称解决这些错误,而无需向错误处理基础结构添加新类

另外,无论如何,这是为了服务器端使用——这不是我返回到客户机的结果。)


但是我在API中迷失了方向。SectionGroups、SectionCollections、SectionGroupCollections;其中一些是可枚举的,一些是不可枚举的。有什么提示吗?

似乎您希望将json文件数据映射到模型

下面是一个工作演示:

型号:

public class ErrorDefinition
{
    public Dictionary<string, Dictionary<string,string>> errorDefinitions
    {
        get;
        set;
    }
}
结果:


似乎需要将json文件数据映射到模型

下面是一个工作演示:

型号:

public class ErrorDefinition
{
    public Dictionary<string, Dictionary<string,string>> errorDefinitions
    {
        get;
        set;
    }
}
结果:


感谢您的回复。我希望它能像字典一样运行,而应用程序不必事先知道每一条消息。如果我添加了必须处理错误的新代码,我希望能够将处理这些错误的数据添加到配置文件中,然后在新代码中按名称引用它们无需修改错误处理基础结构代码。我在最初的帖子中扩展了我的示例,希望能给出更清楚地了解我的想法。嗨@Greenglassoholm,我已经更新了我的答案。确保json文件与我的相同。不同的json文件将匹配不同类型的词典。我还没有机会查看它,但不想让你挂断——谢谢!嗨@Greenglassoholm,我期待着你的回复。如果它对我有用的话或者你,希望你能接受作为答案。如果没有,请继续让我知道。感谢你的回复。我希望让它作为一个字典运行,而不需要应用程序事先知道每个单独的消息。如果我添加了必须处理错误的新代码,我希望能够将处理这些错误的数据添加到配置文件,然后在新代码中按名称引用它们,而无需更改错误处理基础结构代码更清楚地了解我的想法。嗨@Greenglassoholm,我已经更新了我的答案。确保json文件与我的相同。不同的json文件将匹配不同类型的词典。我还没有机会查看它,但不想让你挂断——谢谢!嗨@Greenglassoholm,我期待着你的回复。如果它对我有用的话或者你,希望你能接受作为答案。如果没有,请跟进让我知道。我的答案有助于你解决问题吗?如果有,请接受作为答案吗?如果没有,请跟进让我知道吗?参考:。谢谢。我的答案有助于你解决问题吗?如果有,请接受作为答案吗?如果没有,请跟进让我知道?请参阅:。谢谢。
public class ErrorDefinition
{
    public Dictionary<string, Dictionary<string,string>> errorDefinitions
    {
        get;
        set;
    }
}
public ActionResult Index()
{
    var configuration = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("errordefinitions.json", false)
                        .Build();

    var config = configuration.Get<ErrorDefinition>();
    var data = config.errorDefinitions["fileOpenFailed"]
                        .FirstOrDefault(x=>x.Key== "logMessage").Value;
    return View();
}
{
  "errorDefinitions": {
    "unsupportedExtension": {
      "errorLevel": 2,
      "doLog": true,
      "logMessage": "The file {0} doesn't have a valid extension for this operation.",
      "doEmail": false,
      "emailSubject": "",
      "emailBody": ""
    },
    "fileOpenFailed": {
      "errorLevel": 3,
      "doLog": true,
      "logMessage": "The file {0} cannot be opened.",
      "doEmail": false,
      "emailSubject": "",
      "emailBody": ""
    }
  }
}