我和我的团队在C#中使用JSON.NET反序列化来解决这个奇怪的行为.
我们有一个简单的ViewModel IOrderedEnumerable<long>:
public class TestClass
{
public IOrderedEnumerable<long> orderedDatas { get; set; }
public string Name { get; set; }
public TestClass(string name)
{
this.Name = name;
this.orderedDatas = new List<long>().OrderBy(p => p);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我们只想在API控制器中POST/PUT这个viewmodel
[HttpPost]
public IHttpActionResult Post([FromBody]TestClass test)
{
return Ok(test);
}
Run Code Online (Sandbox Code Playgroud)
使用看起来像这样的json调用此API:
{
Name: "tiit",
"orderedDatas": [
2,
3,
4
],
}
Run Code Online (Sandbox Code Playgroud)
通过这个调用,我们看到没有调用构造函数(可以解释为它不是默认构造函数).但奇怪的是,如果我们将集合的类型更改为IEnumerable或IList,则正确调用构造函数.
如果我们将构造函数更改TestClass为默认构造函数:
public class TestClass
{
public IOrderedEnumerable<long> orderedDatas { get; set; }
public string Name …Run Code Online (Sandbox Code Playgroud)