提交JSON数据后Wagons集合count为0的原因排查
Swagger提交JSON后Wagons集合为空的原因分析
输入的请求JSON
{ "Train": { "Name":"Ekspres", "Wagons": [ {"Name":"Wagon 1", "Capacity":100, "FullSeatNumber":68}, {"Name":"Wagon 2", "Capacity":90, "FullSeatNumber":50}, {"Name":"Wagon 3", "Capacity":80, "FullSeatNumber":80} ] }, "PersonReservation":3, "DifferentWagon":true }
对应的C#实体类
public class Root { public Train Train { get; set; } public int PersonReservation { get; set; } public bool DifferentWagon { get; set; } } public class Train { public string Name { get; set; } public List<Wagon> Wagons { get; set; } } public class Wagon { public string Name { get; set; } public int Capacity { get; set; } public int FullSeatNumber { get; set; } }
可能的原因
集合未初始化:C#类中
Train的Wagons属性仅声明了List<Wagon>类型,但未在构造函数中初始化实例。部分序列化框架(如System.Text.Json)在反序列化时,不会自动为未初始化的集合创建实例,导致JSON中的数组无法填充进去,最终集合count为0。解决方法是在Train类的构造函数中初始化Wagons:public class Train { public Train() { Wagons = new List<Wagon>(); } public string Name { get; set; } public List<Wagon> Wagons { get; set; } }大小写匹配问题:如果后端使用的序列化框架(比如Newtonsoft.Json)未开启大小写不敏感配置,而Swagger实际发送的请求体中
Wagons字段名大小写与C#属性不一致(比如误写为小写wagons),会导致属性无法绑定。可以通过浏览器开发者工具查看Network面板中的请求payload,确认字段名大小写是否和C#属性完全一致;也可以在序列化配置中开启大小写不敏感,比如System.Text.Json的配置:services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; });Swagger实际发送的请求体有误:Swagger UI有时会因注解或配置问题,导致实际发送的请求体与手动输入的不一致(比如
Wagons数组被遗漏、格式错误)。建议通过抓包工具查看真实的HTTP请求内容,确认JSON结构是否正确。序列化配置异常:如果后端配置了自定义的序列化转换器、忽略某些属性的规则,可能影响
Wagons集合的反序列化。检查项目中的序列化配置,确认没有排除Wagons属性,也没有自定义逻辑干扰集合的绑定。
内容的提问来源于stack exchange,提问作者Oktay EFE
相关产品推荐
相关产品推荐

