ASP.NET Web API方法如何接收具有多态属性的对象?

时间:2015-08-21 21:32:53

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

我有一个场景,我将一些数据传递给ASP.NET Web API方法,其中一个是共享基本类型的对象列表。因此,该方法接受单个DTO参数中的POST数据,如Web API所期望的那样,如下所示:

public HttpResponseMessage SaveConfig(SaveConfigRequest req) {
    // do stuff with req
}

SaveConfigRequest DTO的数据如下:

public class SaveConfigRequest {
    public string Code { get; set; }
    public IEnumerable<BaseParameter> Parameters { get; set; }
}

BaseParameter是一个抽象类,有几个具体的实现:

public abstract class BaseParameter {
    protected BaseParameter(ParameterType type) {
        this.Type = type;
    }
    public ParameterType Type { get; private set; }
    public string Name { get; set; }
}

// TODO: implement other parameters
public class DateParameter : BaseParameter {
    public DateParameter() : base(ParameterType.Date) {}
    public string DefaultDateFormula { get; set; }
}

我需要的是Web API能够反序列化包含参数集合的POST请求,以便将它们反序列化为具体类型。我发布了序列化为JSON的数据。

我做过的一次尝试是将TypeNameHandling of the Json.NET formatter设置为Auto并在我发送的JSON中添加$type属性,但仍然导致方法中出现空集合。

第二次尝试是为BaseParameter类型创建自定义模型绑定器,但我认为它没有被触发,因为BaseParameter不是模型,只是一个一部分。也许我还没有正确配置它(我在ModelBinder上尝试了BaseParameter属性并在configuration.BindParameter(typeof(BaseParameter), new ParameterModelBinder())中调用了App_Start

所以,我的问题是允许部分Web API方法的模型参数接受抽象类型的值集合的最简单方法是什么?

0 个答案:

没有答案