Asp.Net Controller操作返回意外的JSON数据

时间:2019-04-18 16:07:00

标签: asp.net json asp.net-mvc

我正在查看一些旧代码,但看到一些我无法弄清的东西。该代码是返回动态对象的控制器操作:

return new
{
    Result = true,
    Count = data.Count(),
    Students = data.Select(s => string.Format("{0}, {1}", s.LastName, s.FirstName))
};

但是,浏览器中生成的JSON并没有像我期望的那样回来:

{
    "$id":"1",
    "Result":true,
    "Count":1,
    "Students":
    {
        "$id":"2",
        "$values":["USER, ACTIVE"]
    }
}

我期望的是,我通常会在其他时间做这种事情,这更像是这样:

{
    "Result":true,
    "Count":1,
    "Students":
    {
        ["USER, ACTIVE"]
    }
}

我不知道$ id和$ values属性来自何处。我以前从未见过.Net发生这种情况,所以我不确定是什么原因造成的。导致问题的原因不是动态对象返回,因为我将其切换为命名类型只是为了对其进行测试,并且仍然可以完成相同的操作。

2 个答案:

答案 0 :(得分:1)

您需要将此行代码添加到Global.asax以避免附加$ id

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling 
= Newtonsoft.Json.PreserveReferencesHandling.None;

答案 1 :(得分:-1)

您需要在学生结尾处添加一个.ToList()。

{
    Result = true,
    Count = data.Count(),
    Students = data.Select(s => string.Format("{0}, {1}", s.LastName, s.FirstName)).ToList()
};