我有以下课程:
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属性)。
这可能是什么原因?
顺便说一句,我很清楚编写自定义模型绑定器可以解决这个问题,但我想尽可能避免这样做。
答案 0 :(得分:1)
这就是默认模型绑定器的工作原理 - 作为action参数放置的类型是绑定器将尝试实例化的类型,它不知道你真的希望实例化派生的类型在幕后。 FWIW它在第一个场景中null
的原因是因为你无法实例化abstract
类,因此为什么删除它然后有效。
顺便说一句,我很清楚编写自定义模型绑定器可以解决这个问题,但我希望尽可能避免这样做。
不幸的是,没有办法解决它 - 你需要一个自定义模型绑定器。