格式化API JSON响应以将属性添加到数组

我有以下api控制器,可返回您在此处看到的查询的json表示形式:

public async Task<actionResult<IEnumerable<CarDto>>> getcarData(Guid carID)
{
    var carData = await (from cl in _context.CarList
                         join tl in _context.transmissionList
                             on cl.CId equals tl.CId
                         join to in _context.transmissionOptions
                             on tl.TId equals to.TId
                         where cl.CId == carID
                         select new CarDto
                         {
                             CarId = cl.CarId,TransmissionId = tl.TId,OptionId = to.OptionId,GearId = to.GearId
                         })
                         .ToListAsync();
    return carData;
}

返回的json数据如下:

[
    {
        "carId": "351a","transmissionId": "ec7","optionId": "a1","gearId": "674532a"
    },{
        "carId": "351a","optionId": "b7","gearId": "5f9173f"
    },"optionId": "c5","gearId": "cf807"
    }
]

但是,我希望对它进行格式化,以便有一个名为transmissionChoices的属性,其中包含一个可能的选项数组。

赞:

{
    "carId": "351a","transmissionChoices": [
        {
            "optionId": "a1","gearId": "674532a"
        },{
            "optionId": "b7","gearId": "5f9173f"
        },{
            "optionId": "c5","gearId": "cf807"
        }
    ]
}

有没有办法让控制器像这样格式化它?

inlovelove 回答:格式化API JSON响应以将属性添加到数组

您可以使用LINQ GroupBy方法,然后将分组的结果投影到所需的形状中。

public async Task<ActionResult<IEnumerable<object>>> GetCarData(Guid carID)
{
    var carData = await (from cl in _context.CarList
                        join tl in _context.transmissionList
                            on cl.CId equals tl.CId
                        join to in _context.transmissionOptions
                            on tl.TId equals to.TId
                        where cl.CId == carID
                        select new
                        {
                            CarId = cl.CarId,TransmissionId = tl.TId,OptionId = to.OptionId,GearId = to.GearId
                        })
                        .GroupBy(x => x.CarId)
                        .Select(g => new
                        {
                            CarId = g.First().CarId,TransmissionId = g.First().TransmissionId,TransmissionChoices = g.Select(x => new
                            {
                                OptionId = x.OptionId,GearId = x.GearId
                            })
                        })
                        .ToListAsync();
    return carData;
}

请注意,这会将结果投影到匿名类型中。随意创建一个与所需模式匹配的模型,然后在Select(...)投影中使用该模型。

本文链接:https://www.f2er.com/3149127.html

大家都在问