ASP.NET Core API中Swagger未识别BillDTO集合字段问题咨询
解决ASP.NET Core API中BillDetails字段无法被Swagger识别及请求绑定失败的问题
1. 将BillDTO中的字段改为属性
你的BillDTO里的BillDetails是字段,ASP.NET Core的模型绑定系统默认只处理带get/set访问器的属性,Swagger生成文档也仅识别类的属性,因此字段不会出现在Swagger示例中,也无法被请求参数绑定。
修改后的BillDTO代码:
public class BillDTO { public DateTime Date { get; set; } public double Total { get; set; } public List<BillDetail> BillDetails { get; set; } = new List<BillDetail>(); }
2. 修正请求JSON的格式
你提交的JSON中billDetails用大括号{}包裹元素,但List<T>对应JSON的数组类型,必须用中括号[]声明,且数组元素之间需要用逗号分隔:
正确的请求示例:
{ "date": "2022-08-23T08:11:22.281Z", "total": 0, "billDetails": [ { "menuItem": { "id": 1 } }, { "menuItem": { "id": 2 } } ] }
3. 可选:强制指定序列化名称(若Swagger仍不显示)
如果修改属性后Swagger仍未展示billDetails字段,可以通过[JsonPropertyName]属性明确指定序列化名称,确保和请求中的字段名匹配:
using System.Text.Json.Serialization; public class BillDTO { public DateTime Date { get; set; } public double Total { get; set; } [JsonPropertyName("billDetails")] public List<BillDetail> BillDetails { get; set; } = new List<BillDetail>(); }
内容的提问来源于stack exchange,提问作者Văn Tâm Nguyễn
相关产品推荐
相关产品推荐

