使用 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”的部分,由于“.”,它不会像上一个示例中那样映射到对象。以它的名义。有什么想法如何使其成为可能吗?我无法重命名配置文件中的 key 。
我尝试创建另一个类属性并创建一个如下所示的类,但它也不起作用。
public class NewClassSettings {
public Attribute attribute { get; set; }
}
编辑:我正在使用 .NET Framework 4.7.2
最佳答案
来自 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
关于c# - Config.GetSection<T> 具有无效的类属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75835205/