![](/img/trans.png)
[英]Bind request containing Header property with Hyphens to .Net Core 3.1 API
[英]JSON configuration properties containing dashes/hyphens in .NET Core
我有一個使用 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 比 JSON.Net 大 20 多倍,並且配置庫處理其他事情,例如自動重新加載、綁定、合並和可選文件。
我已經嘗試將 DataMember 屬性添加到我的類的屬性中,以指示 json 屬性的名稱,但這並不能解決問題。
有沒有辦法使用 .NET Core Microsoft.Extensions.Configuration.Json
提供程序來做到這一點?
在我寫這個問題的時候,我決定深入研究 .net 核心源,發現不,不可能做我想做的事。
所以,我決定修復它,等待ASP.Net 配置拉取請求 775的結果,它可能會在 .net 核心的未來版本中實現。 請隨時查看/審查該拉取請求。
在此之前,一個相對簡單的解決方法是像往常一樣綁定配置,然后通過 ConfigurationRoot 對象的索引器手動訪問任何不受支持的設置。
請注意,如果您使用自動重新加載功能,您也必須手動處理重新加載時的屬性設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.