Вложенные массивы конфигурации в C # CLI - PullRequest
0 голосов
/ 04 марта 2019

Я занят игрой с методами настройки внутри CLI-приложения C #, пытаясь переместить некоторые из моих жестко заданных настроек в более долгосрочное управляемое местоположение (config.json).

DeviceTypes [0].ModelCheck [0] .Check возвращает значение NULL, DeviceTypes [0] .Vendor и другие исправны, и даже кажется, что значение ModelCheck имеет правильную длину массива из конфигурации.

Кажется, что вложенный массив заканчиваетсяне заполнены данными, и я не уверен, почему.

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."
        }
      ]
    }
  ]
}

1 Ответ

0 голосов
/ 05 марта 2019

Похоже, ModelCheck - единственный класс, в котором вы не указали доступ для получения и установки ({ get; set; }).Я предполагаю здесь, но может ли это быть проблемой?

...