【发布时间】:2011-05-14 11:15:27
【问题描述】:
我通过向已经存在的 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 };
这就是麻烦的开始;虽然通信完美进行,并且成功函数被调用,但我在 JavaScript 中使用的结果数组并没有我期望的干净结构:我最终不得不访问一个简单的索引数组,而不是像 val = ret.PropName1; 那样访问值依次包含两对字典:{ "Value"="val, "Key"="PropName1" };(所以像o[0].Key 这样的东西会给我属性名称)
我想知道是否有一种智能、快速的方法来重写 Controller 中的 JsonResult 创建,从而在 View 中获得一个干净整洁的字典。 我有几个想法,但不是特别干净:我可以丢弃服务器端的 JsonResult 重用,只创建一个具有所有正确属性的匿名对象;或者,我可以在 Javascript 中创建一个翻译函数,将结果翻译成一个新的 Array()。我正在寻找更好的解决方案。
[稍后编辑] 数组以它的方式出现,因为字典被定义为<string, object>。如果是<string, string>,它将按照我最初期望的方式发送。但由于我实际上使用了该包中的对象,所以我将保持原样,并通过以下函数传递 json 响应。
【问题讨论】:
标签: arrays json asp.net-mvc translate jsonresult