簡體   English   中英

.NET Core 中包含破折號/連字符的 JSON 配置屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM