You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:36:18