如何将Dictionary <string,object =“”>作为JsonResult返回,并在JavaScript中获得正确的结果?</string,>

时间:2010-11-23 13:13:00

标签: arrays json asp.net-mvc translate jsonresult

我在Controller中构建我的JsonResult,通过向已经存在的JsonResult添加一些额外的信息(从不同的方法返回)。为了添加更多属性,我将最初的JsonResult转换为Dictionary:

IDictionary<string, object> wrapper = (IDictionary<string, object>)new 
     System.Web.Routing.RouteValueDictionary(json.Data);

然后我只需写wrapper["..."] = "value"

即可添加数据

该方法返回一个新的JsonResult,包装为.Data:

new JsonResult() { wrapper, JsonRequestBehavior.AllowGet };

那就是麻烦的开始;虽然通信发生得很好,并且成功函数被调用,但我在JavaScript中使用的结果数组没有我期望的干净结构:而不是像val = ret.PropName1;那样访问值我最终不得不访问一个简单的索引数组,其中包含两对字典:{ "Value"="val, "Key"="PropName1" };(所以像o[0].Key之类的东西会给我属性名称)

我想知道是否有一种智能,快速的方法来重写Controller中的JsonResult创建,以便在View中获得一个漂亮的干净字典。 我有几个想法,但它们并不是特别干净:我可以在服务器端抛弃JsonResult重用,只需创建一个具有所有正确属性的匿名对象;或者,我可以在Javascript中创建一个翻译函数,它可以将结果转换为一个新的Array()。我正在寻找更好的解决方案。

[稍后编辑] 数组的工作方式是因为字典定义为<string, object>。如果它是<string, string>,它将以我原先预期的方式发送。但是因为我实际上使用了那个包中的对象,所以我只是保持原样,并通过下面的函数传递json响应。

1 个答案:

答案 0 :(得分:1)

补遗:在写上述问题时,我想到'坏'数组和'好'数组之间的转换确实非常简单:

    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;
    }

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