在我的控制器中,我有一个返回 JSON 数据的操作:
[HttpGet]
public ActionResult AjaxJson(){
var ret = new List<dynamic>();
ret.Add(new{
Make = "Honda",
Year = 2011,
});
ret.Add(new{
Make = "BMW",
Fun = true
});
return Json(new { json = ret }, JsonRequestBehavior.AllowGet);
}
我有点担心dynamic
关键字的使用,因为列表中的项目实际上是匿名类型。但是没有办法创建匿名类型的列表。
我的第二个问题(不那么重要)是,如果我将 JSON 数据作为数组返回。在客户端上,要到达Honda
,我必须以这种方式引用它:data.json[0].Make
但我希望能够这样做:data.json.MyWeekdayCar.Make
我知道如果我将 JSON 数据作为对象返回(稍后列出的控制器操作),我可以使用 引用Honda
,data.json.MyWeekdayCar.Make
但我将失去使用data.json.length
. 有没有办法两全其美 - 能够使用data.json.MyWeekdayCar.Make
和计算客户端的对象数量?
控制器将 JSON 数据作为对象返回:
[HttpGet]
public ActionResult AjaxJson(){
var ret = new{
MyWeekdayCar = new{
Make = "Honda",
Year = 2011
},
MyWeekendCar = new{
Make = "BMW",
Fun = true
},
length = 2 // this makes client side data.json.length work, but it doesn't feel normal.
};
return Json(new { json = ret }, JsonRequestBehavior.AllowGet);
}
编辑
将动态列表与匿名对象一起使用是否有副作用或意外问题?