Я строю свой JsonResult в контроллере, добавив дополнительную информацию в уже существующий JsonResult (возвращенный с помощью другого метода). Для того, чтобы добавить больше свойств, я преобразовал первоначальный JsonResult в словарь:Как я могу вернуть словарь <string, Object> как JsonResult, и получить правильный результат в JavaScript?
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, которая могла бы перевести результат в новый массив(). Я ищу лучшие решения.
[Редактировать позже] Массив поступает так, как это делается, потому что словарь был определен как <string, object>
. Если бы это было <string, string>
, оно было бы отправлено так, как я этого ожидал. Но поскольку я фактически использую объекты из этого мешка, я просто оставлю это так, как он есть, и передам json-ответ через следующую функцию.
принято обходное решение, в конце концов; не было лучшего решения. – Liz 2012-03-13 12:51:13