C#如何按产品分类分组返回指定结构的接口响应数据
问题根因
- 你的
return语句放在了分类遍历的foreach循环内部,处理完第一个分类后就直接返回结果,导致后续分类数据全部丢失 - 当前方法的返回类型是
List<ProductSummary>,和你期望的「分类名称为键、对应产品列表为值的键值对结构」不匹配,即使调整返回位置也无法得到目标响应格式
修复后的代码
// 首先修改方法返回类型,适配分组后的字典结构 public async Task<Dictionary<string, List<ProductSummary>>> GetProductDetails(string pId, bool isSplitVersion) { var response = await dbAccess.GetProductDetailsReport(pId); if (isSplitVersion) { // 直接按分类分组后转字典,无需手动循环遍历添加 return response .GroupBy(x => x.PRODUCT_CATEGORY) .ToDictionary( group => group.Key, group => productReportMapper.Map(group.ToList()) ); } // 不拆分的场景统一放在默认key下,你也可以根据业务需求调整这部分逻辑 return new Dictionary<string, List<ProductSummary>> { { "Default", productReportMapper.Map(response) } }; }
补充说明
- 调整后返回的字典结构序列化后,会自动匹配你期望的
Value下按分类做key的响应格式 - 如果你的mapper支持直接映射
IEnumerable<源类型>,可以去掉group.ToList()的调用优化性能
内容的提问来源于stack exchange,提问作者rissa
相关产品推荐
相关产品推荐

