模型绑定到继承类

时间:2015-01-21 17:43:11

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

我有以下课程:

public abstract class InputVariableVm
{
    public InputVariableVmType Type { get; set; }
}



[KnownType(typeof(BoolInputVariableVm))]
public class BoolInputVariableVm : InputVariableVm
{
    public bool Value { get; set; }

    public BoolInputVariableVm(string name, bool value)
    {
        Value = value;
        Type = InputVariableVmType.Bool;
    }
}

[KnownType(typeof(StringInputVariableVm))]
public class StringInputVariableVm : InputVariableVm
{
    public string Value { get; set; }

    public StringInputVariableVm(string name, string value)
    {
        Value = value;
        Type = InputVariableVmType.String;
    }
}

在我的Web API控制器中,我正在尝试绑定到InputVariableVm(String或Bool)的对象。

但是对象总是为null - 但是当我从基类中删除“abstract”关键字时,它会插入基类(但没有具体的实现,因此缺少Value属性)。

这可能是什么原因?

顺便说一句,我很清楚编写自定义模型绑定器可以解决这个问题,但我想尽可能避免这样做。

1 个答案:

答案 0 :(得分:1)

这就是默认模型绑定器的工作原理 - 作为action参数放置的类型是绑定器将尝试实例化的类型,它不知道你真的希望实例化派生的类型在幕后。 FWIW它在第一个场景中null的原因是因为你无法实例化abstract类,因此为什么删除它然后有效。

  

顺便说一句,我很清楚编写自定义模型绑定器可以解决这个问题,但我希望尽可能避免这样做。

不幸的是,没有办法解决它 - 你需要一个自定义模型绑定器。