我怎样才能返回一个词典<字符串,对象>为JsonResult,并获得在JavaScript正确的结果呢?
-
27-09-2019 - |
题
我通过加入一些额外的信息到一个已经存在的JsonResult(从不同的方法返回)构建我在控制器JsonResult。为了添加更多的属性,我转换初始JsonResult到词典:
IDictionary<string, object> wrapper = (IDictionary<string, object>)new
System.Web.Routing.RouteValueDictionary(json.Data);
然后,我刚写wrapper["..."] = "value"
添加数据。
该方法返回一个新JsonResult,与包装器。数据:
new JsonResult() { wrapper, JsonRequestBehavior.AllowGet };
和这就是麻烦启动;而通信发生在完美,成功函数被调用,所得到的阵列,其余在JavaScript中使用不具有清洁结构I预计有:而不是访问值作为val = ret.PropName1;
我最终不得不访问一个简单的索引数组,其中载有翻字典有两对:{ "Value"="val, "Key"="PropName1" };
(所以像o[0].Key
会给我的属性名)
我想知道是否有改写控制器中的JsonResult创作,让在查看一个干净的词典中的智能,快捷的方式。 有一对夫妇的想法我也有,但不是特别干净:我可以扔掉JsonResult重用在服务器端,而只是使所有的右键属性的匿名对象;或者,我可以做一个翻译功能的Javascript可能的结果转化为一个新的Array()。我在寻找更好的解决方案。
<强> [后来编辑] 强>的阵列来它因为字典定义为<string, object>
的方式。如果是<string, string>
,将它送到我本来期望它的方式。但是,因为实际上我用的对象从那个袋子,我就离开它,它是这样的,并通过以下功能JSON响应。
解决方案
附录:写入上述问题,它发生,我认为“坏”的阵列和“好”的阵列之间的翻译确实是很简单的:
function translateAjaxResult(ret) {
var result = new Array();
if (ret == null) return result;
for(var i = 0; i < ret.length; i++)
result[ret[i].Key] = ret[i].Value;
return result;
}
尽管如此,它仍然是一个补丁的问题,而不是解决问题的方案,所以我还是喜欢一个更优雅的解决方案。
不隶属于 StackOverflow