Web API控制器中的通用类型作为输入

时间:2018-02-17 09:15:13

标签: c# generics asp.net-web-api

我有这个dto课程:

public class VehicleDto<T>
{
    public string Id { get; set; }
    public T TypeInfo { get; set; }
}

T可以是以下类别之一:

public class Machine
{
    public string VId { get; set; }

    public string MachineCategory{ get; set; }
}

public class Motor
{
    public string MId { get; set; }

    public string MotorCategory{ get; set; }
}

这是我的行动控制员:

[Route("")]
public async Task<IHttpActionResult> PostData(IList<VehicleDto<T>> input)
{

}

我希望从类型为VehicleDto的客户端收到json,但T可以是Motor或Machine我的意思是不同的T类型,我知道T只能是一种类型,但我如何在列表中有不同的类型。 一个解决方案是我有不同的Apis与不同类型的输入 但我想知道是否有另一种更好的方法。

编辑:

这是示例输入json:

[{"Id":"183","TypeInfo":{ "VId":"546","MachineCategory":"MCA"}},{"Id":"123","TypeInfo":{ "MId":"546","MotorCategory":"MTA"}}]

1 个答案:

答案 0 :(得分:0)

如果您遵循相同的类结构而不是反序列化为单个对象,因为它们是两个不同的类MotorMachine

使用以下类结构实现它的一种方法:

public class Vehicle
{
    public string Id { get; set; }
    public VehicleDto VehicleDto { get; set; }
}

public class VehicleDto
{
    public string VId { get; set; }
    public string MachineCategory { get; set; }
    public string MId { get; set; }
    public string MotorCategory { get; set; }
}

将端点暴露为:

public async Task<IHttpActionResult> PostData(List<Vehicle>> input)
{

}