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作为密钥类型。唯一支持的类型是string和Enum类型。
这实际上是在源代码中声明的:
if (keyType != typeof(string) && !keyTypeIsEnum)
{
// We only support string and enum keys
return;
}
Run Code Online (Sandbox Code Playgroud)
但我认为其他地方没有记录到这一点。
| 归档时间: |
|
| 查看次数: |
6085 次 |
| 最近记录: |