我怎样才能返回一个词典<字符串,对象>为JsonResult,并获得在JavaScript正确的结果呢?

StackOverflow https://stackoverflow.com/questions/4256337

我通过加入一些额外的信息到一个已经存在的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;
    }

尽管如此,它仍然是一个补丁的问题,而不是解决问题的方案,所以我还是喜欢一个更优雅的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top