当构造函数包含复杂类型时,控制器参数绑定复杂类型

时间:2017-05-18 09:42:35

标签: c# asp.net serialization asp.net-mvc-routing model-binding

我注意到,当构造函数参数包含复杂类型时,我的DTO类需要公共无参数构造函数或带有[JsonConstructor]属性的非公共类,以便将其作为Json发布到控制器操作。

所以,行动将是

[HttpPost]
public void Something([FromBody] TestClass test) {}

当班级看起来如下,我发布了Json { "SomeProp": true }

public class TestClass
{


    public TestClass(bool something)
    {
        SomeProp = something;
    }

    public bool SomeProp { get; set; }
}

然后对测试对象进行适当的反序列化和实例化。

但是,当我在构造函数中使用复杂类型时,获取操作的对象为null,除非我添加一个公共或非公共[JsonConstructor]无参数构造函数。

    //[JsonConstructor] does not work unless I uncomment the attribute
    private TestClass(){}

    public TestClass(TestClass otherTest)
    {
        SomeProp = otherTest.SomeProp;
    }

你能告诉我为什么会这样吗?而且,这是JsonSerialization或模型绑定的问题,还是两者兼而有之?

我想围绕我所有的DTO类创建一个单元测试,确保它们可以发布,所以最好了解后面发生的事情。

0 个答案:

没有答案