私のコントローラーには、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
リスト内の項目は実際には匿名型であるため、キーワードの使用について少し心配しています。しかし、匿名タイプのリストを作成する方法はありません。
2番目の質問(それほど重要ではありません)は、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);
}
編集
匿名オブジェクトで動的リストを使用することによる副作用や意図しない問題はありますか?