数组 – 如何将字典作为JsonResult返回,并在JavaScript中获得正确的结果?

我正在通过向已经存在的JsonResult添加一些额外信息(从不同的方法返回)在Controller中构建我的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 };

这就是麻烦的起点;当通信发生完美,并且调用success函数时,我在JavaScript中使用的结果数组没有我期望的干净结构:而不是访问值val = ret.PropName1;我最终不得不访问一个简单的索引数组,该数组又包含一对包含两对的字典:{“Value”=“val”,Key“=”PropName1“};(所以类似于o [0] .Key会给出我的财产名称)

我想知道是否有一种智能,快速的方法来重写Controller中的JsonResult创建,以便在View中获得一个漂亮的干净字典.
我有几个想法,但它们并不是特别干净:我可以在服务器端抛弃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;
    }

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

相关文章

文章浏览阅读2.4k次。最近要优化cesium里的热力图效果,浏览...
文章浏览阅读1.2w次,点赞3次,收藏19次。在 Python中读取 j...
文章浏览阅读1.4k次。首字母缩略词 API 代表应用程序编程接口...
文章浏览阅读802次,点赞10次,收藏10次。解决一个JSON反序列...
文章浏览阅读882次。Unity Json和Xml的序列化和反序列化_uni...