.NET Core 中的强类型配置忽略 JsonProperty 属性



我一直在.NET Core中使用强类型配置,我发现了一些奇怪的行为。

波科

public class ModuleConfiguration
{
[JsonProperty("menu")]
public List<MenuItem> MenuItems { get; set; }
}

设置.json

{
"moduleConfiguration": {
"menu": [
{
"id": 1,
"name": "test"
}
]
}
}

当我加载配置时:

var builder = new ConfigurationBuilder().AddJsonFile(path);
var config = builder.Build().GetSection("moduleConfiguration").Get<T>();

MenuItems集合为空,但如果我将"menu"更改为"menuItems"(在 settings.json 中),该集合将正确填充。

这是否意味着JsonProperty属性被忽略了?

这不是Microsoft.Extensions.Configuration(特别是Microsoft.Extensions.Configuration.Json)的工作方式。它不使用 JSON.NET 来反序列化配置,因为配置设置可以来自不同的来源,例如 xml 文件、环境变量或命令行参数。

所有这些都存储在字典中并查询。

例如,如果要通过配置访问moduleConfiguration.menu,则必须执行Configuration["moduleConfiguration:menu"](请注意,冒号:用作子对象的分隔符)。

由于上述原因,通过[JsonProperty("menu")]注释属性不会执行任何操作,因为 JSON.NET 不参与该过程,并且属性只是元数据,本身不执行任何操作。

此外,当您观察 GitHub 上的源代码时,您会发现它使用JsonReader和访问者模式来填充字典。

话虽如此:C# 中的属性和 json 中的属性(或 xml 或命令行参数)必须完全(不区分大小写)。

相关内容

  • 没有找到相关文章

最新更新