使用 IConfigurationRoot 扩展方法
public static T GetSectionAsObject<T>(this IConfigurationRoot configuration, string key)
{
return configuration.GetSection(key).Get<T>();
}
我正在从配置文件中检索部分作为对象。 例如我在配置文件中有一个部分:
"RandomClass": {
"Attribute1": "x",
"Attribute2": y,
"Attribute3": "z"
},
被映射到 RandomClassSettings 类的对象
public class RandomClassSettings
{
public string Attribute1 { get; set; }
public string Attribute2 { get; set; }
public string Attribute3 { get; set; }
}
这行得通。
不幸的是,在配置文件中,我有另一个带有键“attribue.RandomAttribue”的部分,由于“.”,它不会像前面的示例那样映射到对象。在它的名字里。任何想法如何使它成为可能?我无法重命名配置文件中的密钥。
我尝试制作另一个类属性并有一个如下所示的类,但它也不起作用。
public class NewClassSettings {
public Attribute attribute { get; set; }
}
来自
appsettings.json
的数据不会反序列化 JSON,自定义 JsonConfigurationFileParser 负责解析。不考虑任何 System.Text.Json
或 Json.NET
属性。
在这里,您需要在表示该数据的类的属性上应用 ConfigurationKeyNameAttribute。
假设您的数据看起来像下面提到的
attribue.RandomAttribue
键。
{
"data": {
"attribue.RandomAttribue": "abc"
}
}
然后你的班级需要看起来像这样 - 你可以给带有
ConfigurationKeyNameAttribute
属性的任何你选择的名字。
public class Data
{
[ConfigurationKeyName("attribue.RandomAttribue")]
public string Item { get; set; }
}
您通过以下调用获得该数据。
var data = configuration.GetSection("data").Get<Data>();
Console.WriteLine(data.Item); // abc