.NET Core控制台应用读取appsettings.json配置节至模型类异常排查
问题分析与解决办法
核心问题
你的配置中deelnemers是JSON数组(用[]包裹),但模型类Klanten里的Deelnemers属性定义为单个Deelnemer对象,类型不匹配导致配置绑定失败,所以该属性为空。
可行解决办法
1. 修改模型属性类型为集合(推荐)
将Klanten类中的Deelnemers属性改为集合类型(如List<Deelnemer>或数组Deelnemer[]),匹配配置的数组结构:
public class Klanten { [JsonPropertyName("naam")] public string? Naam { get; set; } [JsonPropertyName("deelnemers")] public List<Deelnemer>? Deelnemers { get; set; } // 改为List集合 } public class Deelnemer { [JsonPropertyName("naam")] public string? Naam { get; set; } [JsonPropertyName("opslaglocatie")] public string? OpslagLocatie { get; set; } }
修改后再用Configuration.GetSection("klanten").Get<List<Klanten>>()即可正常绑定所有属性。
2. 若需单个对象,手动处理集合元素
如果业务逻辑中deelnemers永远只有一个元素,可以先绑定为集合,再手动提取第一个元素赋值:
// 先定义支持集合的临时模型 public class KlantenTemp { [JsonPropertyName("naam")] public string? Naam { get; set; } [JsonPropertyName("deelnemers")] public List<Deelnemer>? DeelnemersList { get; set; } } // 绑定后转换为目标模型 var tempKlanten = Configuration.GetSection("klanten").Get<List<KlantenTemp>>(); var klanten = tempKlanten.Select(t => new Klanten { Naam = t.Naam, Deelnemers = t.DeelnemersList?.FirstOrDefault() }).ToList();
3. 确认配置绑定的序列化特性匹配
如果项目中使用了Newtonsoft.Json而非默认的System.Text.Json,需要将JsonPropertyName替换为Newtonsoft的JsonProperty特性:
using Newtonsoft.Json; public class Klanten { [JsonProperty("naam")] public string? Naam { get; set; } [JsonProperty("deelnemers")] public List<Deelnemer>? Deelnemers { get; set; } }
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

