- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下基于 Json 的配置文件:
{
"PostProcessing": {
"ValidationHandlerConfiguration": {
"MinimumTrustLevel": 80,
"MinimumMatchingTrustLevel": 75
},
"MatchingCharacterRemovals": [
"-",
"''",
":"
]
},
"Processing": {
"OrderSelection": {
"SelectionDaysInterval": 30,
"SelectionDaysMaximum": 365
}
}
}
作为序列化框架,我使用 Newtonsoft。为了将此配置序列化为对象,我实现了以下类:
[JsonObject(MemberSerialization.OptIn)]
public class RecognitionConfiguration {
[JsonProperty(PropertyName = "PostProcessing", Required = Required.Always)]
public PostRecognitionConfiguration PostRecognitionConfiguration { get; set; }
[JsonProperty(PropertyName = "Processing", Required = Required.Always)]
public ProcessRecognitionConfiguration ProcessRecognitionConfiguration { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class PostRecognitionConfiguration {
[JsonProperty(Required = Required.Always)]
public ValidationHandlerConfiguration ValidationHandlerConfiguration { get; set; }
[JsonProperty] public List<string> MatchingCharacterRemovals { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class ProcessRecognitionConfiguration {
[JsonProperty(PropertyName = "OrderSelection", Required = Required.Always)]
public OrderSelectionConfiguration OrderSelectionConfiguration { get; set; }
}
在一个类中,我尝试使用 IConfigurationSection.Get() 将特定配置部分序列化到这些类结构中。
var serializedConfiguration = this.ConfigurationSection.Get<RecognitionConfiguration>();
但是当我调试代码时,我总是得到一个“空”变量 serializedConfiguration,它不是 null,但所有属性都是 null。
如果我用
this.ConfigurationSection.GetSection("Processing").Get<ProcessRecognitionConfiguration>()
或者更改 json 文件中属性的命名,使其与类中的属性名称完全匹配,如下所示:
{
"ProcessRecognitionConfiguration": {
"OrderSelectionConfiguration": {
"SelectionDaysInterval": 30,
"SelectionDaysMaximum": 365
}
}
}
它工作正常。您知道吗,为什么在 JsonProperty 上设置 PropertyName 似乎没有任何效果?
最佳答案
这是设计使然。通过配置绑定(bind)到 POCO 是按照惯例完成的。不像模型绑定(bind)到 Controller 操作参数。
它将 POCO 上的属性名称与提供的 JSON 中的键进行匹配。
引用 Configuration in ASP.NET Core
因此,要么更改设置以匹配原始问题中显示的类,要么更改类以匹配基于 Json 的配置文件中的设置键。
[JsonObject(MemberSerialization.OptIn)]
public class RecognitionConfiguration {
[JsonProperty(PropertyName = "PostProcessing", Required = Required.Always)]
public PostRecognitionConfiguration PostProcessing{ get; set; }
[JsonProperty(PropertyName = "Processing", Required = Required.Always)]
public ProcessRecognitionConfiguration Processing{ get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class PostRecognitionConfiguration {
[JsonProperty(Required = Required.Always)]
public ValidationHandlerConfiguration ValidationHandlerConfiguration { get; set; }
[JsonProperty]
public List<string> MatchingCharacterRemovals { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class ProcessRecognitionConfiguration {
[JsonProperty(PropertyName = "OrderSelection", Required = Required.Always)]
public OrderSelectionConfiguration OrderSelection { get; set; }
}
public partial class ValidationHandlerConfiguration {
[JsonProperty("MinimumTrustLevel")]
public long MinimumTrustLevel { get; set; }
[JsonProperty("MinimumMatchingTrustLevel")]
public long MinimumMatchingTrustLevel { get; set; }
}
public partial class OrderSelectionConfiguration {
[JsonProperty("SelectionDaysInterval")]
public long SelectionDaysInterval { get; set; }
[JsonProperty("SelectionDaysMaximum")]
public long SelectionDaysMaximum { get; set; }
}
关于c# - 无法从 Json 序列化 IConfigurationSection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54945930/
使用 MVC .net Core 并在启动类中构建一个具体的配置类。我的 appsettings.json 看起来像这样: { "myconfig": { "other2": "teste
我创建了 JwtHelper 类。我已经使用它很长时间了。但是,当我更新软件包时,以下行出现错误; 完整的错误信息如下; Severity Code Description Project File
选项模式允许我创建包含配置值的选项对象,如下所述:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/op
我有以下基于 Json 的配置文件: { "PostProcessing": { "ValidationHandlerConfiguration": { "MinimumTru
我查看了 StackOverflow 上发布的各种解决方案——许多都已过时。目的是使用 IConfigurationSection.Get 通过 JsonConfigurationExtensions
我有 .netcore 3.1应用程序,我想将其更新为 .net 5.0我有以下代码 public static IAppSettings ConfigureAppSettings(this ISer
这是我关于该主题的第二个问题。我的第一个问题是 here .Roman Marusyk 为这个问题提供了一个简单的答案。然而,我在现实中有更困难的案例,它会变得更加复杂。因此,我需要使用 AutoMa
在我的 appSettings.json 中,我有一个配置部分,只要它是 json 有效的,它就可以包含任何内容。它通常是一组键/值(字符串/字符串) 我想在我的代码中获取它并在 Controller
我在 .Net Core 控制台应用程序中使类型化配置可刷新时遇到问题。 应用程序将从配置中加载类型化对象... { "LibrarySettings": { "Setting
我的 Program.cs 中有以下代码: var configuration = new ConfigurationBuilder() .SetBasePath(Di
我有一个 .NET Core 控制台应用程序,想要读取 appsettings.json 并将一个部分解析为 List(没有依赖注入(inject)或 ASP.NET Core)。 我已经尝试过 Ho
我收到一个错误: 错误 CS1503 参数 2:无法从“Microsoft.Extensions.Configuration.IConfigurationSection”转换为“System.Acti
我是一名优秀的程序员,十分优秀!