JSON 配置属性包含 .NET Core 中的 dashes/hyphens

JSON configuration properties containing dashes/hyphens in .NET Core

我有一个使用 JSON 配置文件的 .NET Core 2.0 项目,通过 Microsoft.Extensions.Configuration.Json 提供程序。

此应用程序是一个实用程序,用于支持另一个不受我控制的应用程序。 为了与其他应用程序的配置文件保持一致 format/style,多词设置键在词之间使用破折号。

示例JSON:

{
    "multi-word-setting": "setting value"
}

示例设置 class:

public class AppSettings
{
    // Pascal casing, as is typical in C#
    public string MultiWordSetting { get; set; }
}

示例应用程序代码:

class Program
{
    private static void Main ( string[ ] args )
    {
        IConfigurationBuilder configBuilder = new ConfigurationBuilder( ).SetBasePath( Environment.CurrentDirectory ).AddJsonFile( "my-settings.json", true, true );
        IConfigurationRoot configRoot = configBuilder.Build( );
        AppSettings config = new AppSettings( );
        configRoot.Bind( config );
        Console.WriteLine( config.MultiWordSetting );
    }
}

但是,鉴于连字符在 C# 的标识符中是非法的,我如何才能遵循典型的 C# 命名约定,同时又遵循我支持的应用程序的定义样式?

我知道我可以使用 Newtonsoft 及其 JsonPropertyAttribute 来手动处理 json 数据,但如果可能的话,我更愿意在没有 "external" 库的情况下完成这项工作.此外,JSON.Net 大了 20 多倍,配置库处理其他内容,例如自动重新加载、绑定、合并和可选文件。

我已经尝试将 DataMember 属性添加到我的 class 的属性中,以指示 json 属性 的名称,但这并不能解决问题。

有没有办法通过 .NET Core Microsoft.Extensions.Configuration.Json 提供程序做到这一点?

在写题的时候,我决定深入.net core源码,发现不行,做我想做的事是不可能的。

因此,我决定修复它,并且在等待 ASP.Net Configuration Pull Request 775 的结果之前,它可能会出现在未来版本的 .net core 中。请随时 review/scrutinize 请求请求。

在此之前,一个相对简单的解决方法是正常绑定配置,然后通过 ConfigurationRoot 对象的索引器手动访问任何不受支持的设置。

请注意,如果您使用的是自动重新加载功能,您还必须在重新加载时手动设置 属性。