c# - Config.GetSection<T> 具有无效的类属性名称

标签 c# .net config getter automatic-properties

使用 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.JsonJson.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/

相关文章:

c# - 任务取消最佳实践

c# - 删除 Oracle 中不存在的记录是否被认为是错误的形式?

c# - 有人可以用二进制解释 C# 中的溢出吗?

.net - C#Decimal.GetHashCode()和Double.GetHashCode()等于

php - Yii2如何针对不同目的维护不同的日志文件

c# - 我应该使用哪个 ReThinkDB .NET 驱动程序?它们之间的功能差异是什么?

c# - 如何决定是使用 LINQ to SQL 还是 ADO.NET

.net - MVVM 从其他工作区(而不是主控制面板)打开新工作区

apache-spark - 是否可以在 PySpark 中获取当前的 Spark 上下文设置?

java - Guice:Binder#bindConstant() 和 Binder#bind() 之间的区别 ... toInstance