我正在忙于使用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."
}
]
}
]
}
看起来像ModelCheck
是唯一没有指定getter和setter访问权限的类({ get; set; }
)。我在这里猜,但这可能是问题吗?