所以在 ASP.NET MVC中,我有一个类似于这样的控制器操作:
public JsonResult People()
{
var people = db.People.ToList();
return Json(people);
}
当 ajaxed 时,这将返回如下内容:
[
{
"ID": 1,
"Name": "John Smith"
},
{
"ID": 2,
"Name": "Daryl Jackson"
}
]
但是,我正在寻找的不是如上所示的记录的 JSON 数组,而是一个 JSON 对象,其中每条记录的 ID 是键,然后是嵌套为值的记录,如下所示:
{
1: {
"Name": "John Smith"
},
2: {
"Name": "Daryl Jackson"
}
}
我最初的想法是在 C# 中创建一个类似于此结构的字典并将其传递给 Json(),但该方法不知道如何处理字典对象。
有没有办法在 C# 中实现这种结构?目前,我不得不求助于在客户端重组它或使用循环来查找具有我正在搜索的 ID 的记录。如果我能在 Javascript 中按 ID 获取记录会更好。我做错了吗?我是 ASP.NET MVC 环境的新手。
任何建议将不胜感激。谢谢:)
可以使用ToDictionary()
扩展方法。
public ActionResult People()
{
var peopleDictionary = db.People
.Select(x=> new { Id = x.Id, Name= x.FirstName})
.ToDictionary(d => d.Id.ToString(), p => p);
return Json(peopleDictionary, JsonRequestBehavior.AllowGet);
}
假设您的 People 表具有Id
和FirstName
列,此代码将从表数据中返回如下所示的 json 字典
{ "101" : {"Id":101,"Name":"John"},"102":{"Id":102,"Name":"Darryl"} }
使用 Json
metod,无法序列化字典键类型为 int 的字典,因此需要将 int 值显式转换为字符串。
如果要从 userId 中获取特定用户,可以使用字典样式语法yourJsObject[key]
var url="PutRelativeUrlToReportScoreHere";
$.getJSON(url, function(data) {
console.log(data);
//Get the User with Key 102
console.log(data[102]);
});