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

问题描述 投票:0回答:1

使用 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; }
    }
c# .net config getter automatic-properties
1个回答
1
投票

来自

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
© www.soinside.com 2019 - 2024. All rights reserved.