C#CLI中的嵌套配置数组

问题描述 投票:0回答:1

我正在忙于使用C#CLI应用程序内部的配置方法,尝试将我的一些硬编码设置移动到更长期可管理的位置(config.json)。

DeviceTypes [0] .ModelCheck [0] .Check返回null,DeviceTypes [0] .Vendor和其他都很好,甚至看起来ModelCheck值具有来自config的正确数组长度。

嵌套数组似乎最终没有填充数据,我不知道为什么。

Config.cs

public class Config
{
    private IConfigurationRoot config;

    private DeviceType[] _deviceTypes;
    public DeviceType[] DeviceTypes { get => _deviceTypes; }

    private Settings _settings;
    public Settings Settings { get => _settings; }

    public Config()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("Config.json", optional: false, reloadOnChange: true);

        config = builder.Build();

        _deviceTypes = config.GetSection("Devices").Get<DeviceType[]>();
        _settings = config.GetSection("Settings").Get<Settings>();
    }
}

public class DeviceType
{
    public string Vendor { get; set; }
    public string Type { get; set; }
    public string ObjectOID { get; set; }
    public ModelCheck[] ModelChecks { get; set; }
}

public class ModelCheck
{
    public string Check;
    public string Regex;
    public string Example;
}

public class Settings
{
    public string[] SubnetPrefix { get; set; }
    public string SnmpCommunity { get; set; }
}  

Config.json

{
  "Settings": {
    "SubnetPrefix": [
      "172.16.0.0/24",
      "172.16.1.0/24"
    ],
    "SnmpCommunity": "Public"
  },
  "Devices": [
    {
      "Vendor": "Extreme Networks",
      "Type": "Switch",
      "ObjectOID": "1.3.6.1.4.1.1916.2",
      "ModelChecks": [
        {
          "Check": "ExtremeXOS version 12.*",
          "Regex": "(?<Model>.*?> version (?<Version>.*?) by",
          "Example": "ExtremeXOS version 12.6.1.3 v1261b3 by release-manager on Thu Jul 21 09:46:07 PDT 2011"
        },
        {
          "Check": "ExtremeXOS.*",
          "Regex": ".*\\((?<Model>.*?)\\) version (?<Version>.*?) by",
          "Example": "ExtremeXOS (X450a-48t) version 15.3.1.4 v1531b4-patch1-3 by release-manager on Sun Mar 17 03:12:24 EDT 2013"
        }
      ]
    },
    {
      "Vendor": "Cisco",
      "Type": "Router",
      "ObjectOID": "1.3.6.1.4.1.9.1.1639",
      "ModelChecks": [
        {
          "Check": "Cisco IOS XR Software.*",
          "Regex": ".*\\((?<Model>.*?>\\),.*Version (?<Version>.*?)[",
          "Example": "Cisco IOS XR Software (Cisco ASR9K Series),  Version 6.2.25[Default]\nCopyright (c) 2017 by Cisco Systems, Inc."
        }
      ]
    }
  ]
}
c# .net-core command-line-interface
1个回答
0
投票

看起来像ModelCheck是唯一没有指定getter和setter访问权限的类({ get; set; })。我在这里猜,但这可能是问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.