我有一个使用JSON配置文件的.NET Core 2.0项目,通过Microsoft.Extensions.Configuration.Json
提供程序。
此应用程序是一个实用程序应用程序,用于支持我无法控制的其他应用程序。 为了与其他应用程序的配置文件格式/样式保持一致,多字设置键在单词之间使用短划线。
示例JSON:
{
"multi-word-setting": "setting value"
}
示例设置类:
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数据,但如果可能的话,我更愿意在没有“外部”库的情况下完成这项工作。此外,JSON.Net的大小超过20倍,配置库处理其他内容,例如自动重新加载,绑定,合并和可选文件。
我已经尝试将DataMember属性添加到我的类的属性中,以指示json属性的名称,但这不起作用。
有没有办法使用.NET Core Microsoft.Extensions.Configuration.Json
提供程序?
答案 0 :(得分:0)
在我写这个问题的时候,我决定深入研究.net核心资源,发现不,我不可能做我想做的事。
所以,我决定修复它,等待ASP.Net Configuration Pull Request 775的结果,它可能会在未来的.net核心版本中出现。请随时查看/审查该拉取请求。
在此之前,一个相对简单的解决方法是正常绑定配置,然后通过ConfigurationRoot对象的索引器手动访问任何不受支持的设置。
请注意,如果您使用自动重新加载功能,则必须手动处理重新加载时设置属性。