我在控制器中构造JSOREST结果,将一些额外的信息添加到已经存在的JsonResult(从另一种方法返回)。为了添加更多属性,我将初始JsonResult转换为字典:
IDictionary<string, object> wrapper = (IDictionary<string, object>)new
System.Web.Routing.RouteValueDictionary(json.Data);
然后我就通过写
wrapper["..."] = "value"
.
该方法返回一个新的JsonResult,包装为.Data:
new JsonResult() { wrapper, JsonRequestBehavior.AllowGet };
这就是问题的开始;虽然通信进行得很好,调用了success函数,但我在JavaScript中使用的结果数组没有我所期望的干净结构:而不是访问
val = ret.PropName1;
我最终不得不访问一个简单的索引数组,它依次包含一个有两对的字典:
{ "Value"="val, "Key"="PropName1" };
(所以有点像
o[0].Key
会给我物业名称)
我想知道是否有一种聪明、快速的方法来重写控制器中的JsonResult创建,在视图中获得一个干净的字典。
我有两个想法,但不是特别清楚:我可以在服务器端放弃JsonResult重用,只需创建一个具有所有正确属性的匿名对象;或者,我可以用Javascript创建一个转换函数,将结果转换为一个新的数组()。我在寻找更好的解决方案。
[以后编辑]
因为字典定义为
<string, object>
. 如果是的话
<string, string>
,它将按我原先期望的方式发送。但由于我实际使用了那个包中的对象,所以我将保持原样,并通过下面的函数传递json响应。