Config.NET是否支持将JSON对象解析为Dictionary?
Config.NET解析JSON对象为字典的解决方案
根据Config.NET的文档,JSON数组可以被解析为IEnumerable类型,但对于JSON对象({}),同样可以解析为字典结构,不过需要注意类型的使用方式。
你尝试将Colors对象解析为IDictionary<string, IEnumerable<int>>时抛出System.NotSupportedException,原因是Config.NET对接口类型的字典支持有限,改用具体的字典实现类型即可解决问题。
修改后的配置接口
public interface IApplicationConfiguration { public interface IPaletteConfiguration { [Option(DefaultValue = 4)] public int DefaultLineThickness { get; set; } [Option(DefaultValue = 30)] public int DefaultTextSize { get; set; } // 改用具体的Dictionary类型而非IDictionary接口 public Dictionary<string, IEnumerable<int>> Colors { get; set; } } public IPaletteConfiguration Palette { get; set; } }
验证JSON结构
你的JSON结构完全符合要求,无需修改:
"ApplicationConfiguration": { "Palette": { "DefaultLineThickness": 4, "DefaultTextSize": 30, "Colors": { "Red": [ 255, 0, 0 ], "Green": [ 50, 205, 50 ], "Blue": [ 65, 105, 225 ] }, ... }
其他可选方案
如果出于某些原因不想使用具体字典类型,也可以采用自定义配置类的方式:
- 创建颜色配置类:
public class ColorConfig { public string Name { get; set; } public IEnumerable<int> Value { get; set; } }
- 修改配置接口中的
Colors为集合类型:
public IEnumerable<ColorConfig> Colors { get; set; }
- 对应的JSON结构需要调整为数组形式:
"Colors": [ {"Name": "Red", "Value": [255,0,0]}, {"Name": "Green", "Value": [50,205,50]}, {"Name": "Blue", "Value": [65,105,225]} ]
不过直接使用Dictionary<string, IEnumerable<int>>的方式对开发者和用户来说更为便捷,是优先推荐的解决方案。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

