我通过向已经存在的 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
会给我属性名称)
我想知道是否有一种智能、快速的方法来重写控制器中的 JsonResult 创建,以便在视图中获得一个干净的字典。我有几个想法,但不是特别干净:我可以丢弃服务器端的 JsonResult 重用,只创建一个具有所有正确属性的匿名对象;或者,我可以在 Javascript 中创建一个翻译函数,将结果翻译成一个新的 Array()。我正在寻找更好的解决方案。
[稍后编辑]数组以它的方式出现,因为字典被定义为<string, object>
. 如果是<string, string>
,它将按照我最初期望的方式发送。但是由于我实际上使用了该包中的对象,所以我将保持原样,并通过以下函数传递 json 响应。