小编Cyr*_*uis的帖子

使用JSON.NET反编译IOrderedEnumerable <T>

我和我的团队在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)

通过这个调用,我们看到没有调用构造函数(可以解释为它不是默认构造函数).但奇怪的是,如果我们将集合的类型更改为IEnumerableIList,则正确调用构造函数.

如果我们将构造函数更改TestClass为默认构造函数:

public class TestClass
{
    public IOrderedEnumerable<long> orderedDatas { get; set; }
    public string Name …
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net json-deserialization

7
推荐指数
1
解决办法
773
查看次数

标签 统计

c# ×1

json ×1

json-deserialization ×1

json.net ×1

serialization ×1