我注意到,当构造函数参数包含复杂类型时,我的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类创建一个单元测试,确保它们可以发布,所以最好了解后面发生的事情。