принятый обходной путь, в конце концов; лучшего решения не было.

даю свой JsonResult в Controller, добавляя некоторую дополнительную информацию к уже существующему JsonResult (возвращенному из другого метода). Чтобы добавить больше свойств, я преобразовал исходный JsonResult в словарь:

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 через функцию ниже.

Ответы на вопрос(1)

Ваш ответ на вопрос