¿Cómo puedo devolver un Dictionary <string, Object> como JsonResult, Y obtener el resultado correcto en JavaScript?
Estoy construyendo mi JsonResult en Controller agregando información adicional a un JsonResult ya existente (devuelto por un método diferente). Para agregar más propiedades, convertí el JsonResult inicial en un Diccionario:
IDictionary<string, object> wrapper = (IDictionary<string, object>)new
System.Web.Routing.RouteValueDictionary(json.Data);
Luego solo agrego datos escribiendowrapper["..."] = "value"
.
El método devuelve un nuevo JsonResult, con un contenedor como .Data:
new JsonResult() { wrapper, JsonRequestBehavior.AllowGet };
y ahí es donde comienzan los problemas; Si bien la comunicación se realiza perfectamente y se llama a la función de éxito, la matriz resultante que uso en JavaScript no tiene la estructura limpia que espero: en lugar de acceder a los valores comoval = ret.PropName1;
Termino teniendo que acceder a una matriz indexada simple, que contiene a su vez un diccionario con dos pares:{ "Value"="val, "Key"="PropName1" };
(entonces algo comoo[0].Key
me daría el nombre de la propiedad)
Me gustaría saber si hay una forma inteligente y rápida de reescribir la creación de JsonResult en el Controlador, para obtener un diccionario limpio y agradable en la Vista. Tengo un par de ideas que tengo, pero no son particularmente limpias: podría tirar la reutilización de JsonResult en el lado del servidor y simplemente hacer un objeto anónimo con todas las propiedades correctas; o podría hacer una función de traducción en Javascript que podría traducir el resultado en una nueva matriz (). Estoy buscando mejores soluciones.
[Editar más tarde] La matriz viene de la manera en que lo hace porque el diccionario se definió como<string, object>
. Si fuera<string, string>
, se enviaría de la forma en que lo esperaba originalmente. Pero como en realidad uso objetos de esa bolsa, lo dejaré como está y pasaré la respuesta json a través de la función a continuación.