【问题标题】:How to read nested loop json values from appsettings.json and assign to object如何从 appsettings.json 读取嵌套循环 json 值并分配给对象
【发布时间】:2020-10-14 12:00:19
【问题描述】:
"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"
      }
    ]
  }

【问题讨论】:

  • 我想这个问题可能需要改变以避免关闭,添加一些你正在尝试做的事情以及到目前为止没有工作的内容。

标签: c# .net .net-core


【解决方案1】:

你应该看看options pattern

选项模式使用类来提供对相关设置组的强类型访问。当配置设置按场景隔离到单独的类中时,应用程序遵循两个重要的软件工程原则:

接口隔离原则 (ISP) 或封装:场景 (类)依赖于配置设置只依赖于 他们使用的配置设置。关注点分离:设置 对于应用程序的不同部分不依赖或耦合到一个 另一个。

【讨论】:

    【解决方案2】:

    只是想分享一下我是如何在我的应用上执行此操作的(假设 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;
        }
    }
    

    【讨论】:

    • 感谢您的回复。但是如何从 json 中读取“columnFilters”值?
    • 您可以尝试这里的方法thetopsites.net/article/52769655.shtml 或另一种可能的方法(这是我主要做的)是我的答案的编辑:)
    猜你喜欢
    • 2018-08-02
    • 2013-01-12
    • 1970-01-01
    • 2020-11-09
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2021-11-09
    相关资源
    最近更新 更多