Dictionary<Guid, Guid> 从 C# 中的 appsettings.json 映射

Rom*_*rny 2 c# json dictionary appsettings

在控制台应用程序上使用 VS 2017。当我使用时Dictionary<string, Guid>一切正常,但是,当我使用Dictionary<Guid, Guid>它时它不会映射到 AppSettings 对象(字典计数为 0)。有什么办法可以解决这个问题,而不是在应用程序中使用string并将其转换为?Guid

应用程序设置.json

{
    "AppSettings": {
        "DictionaryTest": {
            "55789653-86A3-485C-95E8-5E23C3219130": "74F87895-4965-447A-B07F-F702573218B7", 
            "FB1E7891-B3C2-4E83-A6BF-7F321C11BFFA": "FA7892A9-7925-4150-82A7-5DD3213D1242"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在程序.cs中

var appPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).Replace(@"file:\", "");

var builder = new ConfigurationBuilder()
                 .SetBasePath(Directory.GetCurrentDirectory())
                 .AddJsonFile($@"{appPath}\appsettings.json");

Configuration = builder.Build();

appSettings = new AppSettings();
Configuration.GetSection("AppSettings").Bind(appSettings);
Run Code Online (Sandbox Code Playgroud)

当我使用Dictionary<string, Guid>场景时,变量中有 2 个项目appSettings.DictionaryTest

但是当我使用Dictionary<Guid, Guid>场景时,变量中有 0 个项目appSettings.DictionaryTest

Dictionary<string, Guid>设想:

应用程序设置.cs

public class AppSettings
{
    public Dictionary<string, Guid> DictionaryTest { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Dictionary<Guid, Guid>设想:

应用程序设置.cs

public class AppSettings
{
    public Dictionary<Guid, Guid> DictionaryTest { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

小智 9

目前,Configuration Binder 似乎不支持Guid作为密钥类型。唯一支持的类型是stringEnum类型。

这实际上是在源代码中声明的:

if (keyType != typeof(string) && !keyTypeIsEnum)
{
    // We only support string and enum keys
    return;
}
Run Code Online (Sandbox Code Playgroud)

但我认为其他地方没有记录到这一点。