Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET Core AppSettings.json-为派生项获取正确的类_C#_Dependency Injection_Asp.net Core 3.1_Appsettings - Fatal编程技术网

C# .NET Core AppSettings.json-为派生项获取正确的类

C# .NET Core AppSettings.json-为派生项获取正确的类,c#,dependency-injection,asp.net-core-3.1,appsettings,C#,Dependency Injection,Asp.net Core 3.1,Appsettings,我试图从appsettings.json中获取参数,它是一个派生类列表。 问题是,我不知道如何检索信息并为每个项目创建具有良好类的对象 My appsettings.json如下所示: "DiagnosticSettings": { "Diagnostics": [ { "Type": "Connection", "Address": "xxx" },

我试图从appsettings.json中获取参数,它是一个派生类列表。 问题是,我不知道如何检索信息并为每个项目创建具有良好类的对象

My appsettings.json如下所示:

"DiagnosticSettings": {
"Diagnostics": [
  {
    "Type": "Connection",
    "Address": "xxx"
  },
  {
    "Type": "DNS",
    "DNSAddress": "www.google.com",
    "IPToCompare": "8.8.8.8"
  },
  {
    "Type": "DNS",
    "DNSAddress": "www.abc.com",
    "IPToCompare": "x.x.x.x"
  }, [...] 
]}
var a = Configuration.GetSection("DiagnosticSettings:Diagnostics");
我有一个基本类:

public class BaseDiagnosticConfig
{
    public string Type { get; set; }
}
和派生类,如:

public class DNSDiagConfig : BaseDiagnosticConfig
{
    public string DNSAddress { get; set; }
    public string IPToCompare { get; set; }
}
我可以使用以下内容检索包含项目列表的提供程序:

"DiagnosticSettings": {
"Diagnostics": [
  {
    "Type": "Connection",
    "Address": "xxx"
  },
  {
    "Type": "DNS",
    "DNSAddress": "www.google.com",
    "IPToCompare": "8.8.8.8"
  },
  {
    "Type": "DNS",
    "DNSAddress": "www.abc.com",
    "IPToCompare": "x.x.x.x"
  }, [...] 
]}
var a = Configuration.GetSection("DiagnosticSettings:Diagnostics");
我可以拥有基类列表(但这不是我想要的,因为我丢失了所有派生类信息):

var b=Configuration.GetSection(“DiagnosticsSettings:Diagnostics”).Get();

因此,有一种方法可以获取我的项目,即使我必须逐个检查我的应用设置列表中的所有项目,或者我只是做了一些不可能/错误的事情,这也是一个很好的类。我提供给你一个非常简单的例子,你可以根据你的要求使用

"MySettings": {  
    "Email": "abc@domain.com",   
  }


public class MySettingsModel  
{   
       public string Email { get; set; }  
}
登记

services.Configure<MySettingsModel>(Configuration.GetSection("MySettings"));

参考资料:

你必须这样做。我提供给你一个非常简单的例子,你可以根据你的要求使用

"MySettings": {  
    "Email": "abc@domain.com",   
  }


public class MySettingsModel  
{   
       public string Email { get; set; }  
}
登记

services.Configure<MySettingsModel>(Configuration.GetSection("MySettings"));

引用:

您在这里是在流中划水,有什么不使用一个名为Type的属性的类列表和一个属性字典呢?或者甚至只是一个带有属性字典的字典。在这里,你是在逆流而上,有什么不使用一个带有名为Type的属性的类列表和一个属性字典呢?或者甚至把它变成一本有属性字典的字典