ASP.NET Core向外部API发送JSON序列化失败问题求助
解决方案
一、修复AutoMapper的使用问题
错误原因
你当前的_mapper.Map(products, test.ProductList)写法不符合AutoMapper的映射逻辑:AutoMapper无法直接将List<Products>映射到未初始化的List<ProductModel>属性,且这种调用方式没有正确传递目标对象的关联关系。
正确做法
方式1:分步映射(推荐)
先确保已在AutoMapper配置中添加实体到模型的映射规则:
// AutoMapper配置文件中添加 CreateMap<Products, ProductModel>();
然后分两步完成转换与赋值:
// 将数据库实体列表映射为ProductModel列表 var productModels = _mapper.Map<List<ProductModel>>(products); // 构建符合要求的ProductListModel对象 var test = new ProductListModel { ProductList = productModels };
方式2:配置直接映射规则(可选)
如果希望一步完成转换,可以添加额外的映射规则:
CreateMap<List<Products>, ProductListModel>() .ForMember(dest => dest.ProductList, opt => opt.MapFrom(src => src));
之后直接调用映射即可:
var test = _mapper.Map<ProductListModel>(products);
二、修复序列化/反序列化的错误问题
错误原因
你之前的操作逻辑颠倒:先将List<Products>序列化为JSON数组,再尝试反序列化为ProductListModel(一个包含data字段的对象),两者类型不匹配,因此抛出序列化异常。正确逻辑是先构造符合结构的对象,再序列化得到目标JSON。
正确做法(不使用AutoMapper)
// 手动将数据库实体转换为ProductModel var productModels = products.Select(p => new ProductModel { ProductId = p.ProductId, ProductCode = p.ProductCode }).ToList(); // 构建包含data字段结构的对象 var productListModel = new ProductListModel { ProductList = productModels }; // 序列化为符合外部API要求的JSON // 使用System.Text.Json var json = JsonSerializer.Serialize(productListModel); // 或使用Newtonsoft.Json // var json = JsonConvert.SerializeObject(productListModel);
三、最终输出验证
通过上述方法生成的JSON结构将完全符合要求:
{ "data": [ { "ProductId": 1, "ProductCode": "000001AD" }, { "ProductId": 2, "ProductCode": "000001AB" } ] }
内容的提问来源于stack exchange,提问作者Levan Amashukeli
相关产品推荐
相关产品推荐

