簡體   English   中英

如何從 appsettings.json 讀取嵌套循環 json 值並分配給對象

[英]How to read nested loop json values from appsettings.json and assign to object

"SalesOrderFilters": {
    "skip": 0,
    "take": 0,
    "sort": [
      {
        "sortBy": "productGroup",
        "sortDirection": "Ascending"
      }
    ],
    "filters": [
      {
        "columnFilters": [
          {
            "field": "productGroup",
            "operator": "eq",
            "value": "CC05"
          },
          {
            "field": "productGroup",
            "operator": "eq",
            "value": "CC07"
          }
        ],
        "logic": "or"
      },
      {
        "columnFilters": [
          {
            "field": "specFileDate",
            "operator": "lte",
            "value": "6/26/2017 11:17:20 AM"
          },
          {
            "field": "specFileDate",
            "operator": "gte",
            "value": "4/26/2017 11:17:20 AM"
          }
        ],
        "logic": "and"
      },
      {
        "columnFilters": [
          {
            "field": "designSpecialIndicator",
            "operator": "eq",
            "value": "N"
          }
        ],
        "logic": "and"
      },
      {
        "columnFilters": [
          {
            "field": "buMfgLocId",
            "operator": "eq",
            "value": "5"
          }
        ],
        "logic": "and"
      },
      {
        "columnFilters": [
          {
            "field": "orderType",
            "operator": "eq",
            "value": "SO"
          }
        ],
        "logic": "and"
      },
      {
        "columnFilters": [
          {
            "field": "buMfgLocation",
            "operator": "contains",
            "value": "lexi"
          }
        ],
        "logic": "and"
      }
    ]
  }

您應該查看選項模式

選項模式使用類來提供對相關設置組的強類型訪問。 當配置設置被場景隔離到單獨的類中時,應用程序遵循兩個重要的軟件工程原則:

接口隔離原則 (ISP) 或封裝:依賴於配置設置的場景(類)僅依賴於它們使用的配置設置。 關注點分離:應用程序不同部分的設置不相互依賴或耦合。

只想分享我如何在我的應用程序上執行此操作(假設 appsettings.json 是您的默認配置文件):

public class ConfigHelper : IConfigHelper
{
    private IConfiguration Configuration { get; }

    public ConfigHelper(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public string GetAppSettings(string key)
    {
        return Configuration[key];
    }
}

用法:

...
ConfigHelper.GetAppSettings("SalesOrderFilters:Skip");
...

或者這種方法:

創建一個類來表示您的配置:

public class SalesOrderFilters
{
    public int Skip { get; set; }
    public int Take { get; set; }
    public List<Filters> Filters { get; set; }
    ...
}

public class Filter
{
   public List<ColumnFilter> ColumnFilters { get; set; }
   ...
}

在您的 Startup.cs 中

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddSingleton(typeof(SalesOrderFilters), Configuration.GetSection("SalesOrderFilters").Get<SalesOrderFilters>());
    ...
}

然后你可以在你的控制器/服務類中注入這個對象:

public class MyController
{
    private SalesOrderFilters _settings;

    public MyController(SalesOrderFilters settings)
    {
        _settings = settings;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM