我正在查看一些旧代码,但看到一些我无法弄清的东西。该代码是返回动态对象的控制器操作:
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发生这种情况,所以我不确定是什么原因造成的。导致问题的原因不是动态对象返回,因为我将其切换为命名类型只是为了对其进行测试,并且仍然可以完成相同的操作。
答案 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()
};