Возвращаем на клиент имена Json-параметров с пробелами и прочими символами в Asp.Net MVC
- Категория: Код
- – Автор: Игорь (Администратор)
Вам никогда не приходилось использовать сторонние JavaScript-ы, которые рассчитывают получить json от сервера? Вы когда-нибудь пытались использовать js-скрипты, изначально написанные с расчетом на другие серверные языки, такие как php и python?Может вы встречали такие незамысловатые обращения к ключам объекта, как object["Some Field@ With Probels@ "]? Или может вы знаете, что иногда возвращаемый json не обязательно укладывается в красивые рамки жестких классов, которые можно описать через DataContract? Или же использование анонимных классов это ваше кредо?
Основное преимущество Json - это его невероятная гибкость и простота. Вы запросто можете встретить следующий код, и он не будет нарушать стандарт:
Примечание: Конечно, это немного утрированный пример, но все же он достаточно четко демонстрирует проблему.
Если для обмена данными вы используете жесткие конструкции, которые легко укладываются в шаблоны построения (на подобии xsd для xml), то вы можете обойтись атрибутами DataContract и DataMember, в которых можно указать спец символы и пробелы в именах.
Но, что делать, если Json действительно формируется динамически, включая имена параметров? Составлять строку самостоятельно, при помощи StringBuilder и еже подобным? Ковыряться в поисках забытой запятой или закрывающей фигурной скобки? Согласитесь, что это - не лучшая перспектива.
Примечание: Конечно, использование StringBuilder - это один из самых быстрых способов (по скорости исполнения кода), но все же с ним очень легко ошибиться. Особенно, при составлении больших конструкций, в которых не только быстро возрастает вероятность ошибки, но и необходимое время на исправление таковых.
Тем не менее, существует более простой выход из ситуации. Способ базируется на том, что стандартный сериализатор asp.net, используемый в JsonResult, умеет корректно преобразовывать объекты-справочники, они же Dictionary. Все ключи, не зависимо от того, содержат они спец символы или нет, будут в итоговом Json-е в том виде, в котором вы их задали. Именно этот факт позволяет полноценно использовать следующий код:
Данный хелпер позволяет строить выражения любой формы в простом и понятном виде. На вход функции GetJsonForm передается массив вида [ключ1, значение1, ключ2, значение2, ...], где ключи - это строки, обозначающие имена переменных; а значения содержат либо значение различных сериализуемых типов данных, включая анонимные классы, либо такой же массив вида [ключ11, значение11, ключ21, значение21, ...] (по сути, вложенные объекты). На выходе получается справочник справочников (как бы это не звучало), который легко преобразуется в нужный Json.
Теперь, составить код на сервере (asp.net mvc), который будет возвращать первый пример с json, не составит никакого труда.
Вы можете создать данный экшен в любом месте вашего проекта, и убедиться, что результатом выполнения будет требуемый json.
Если внимательно посмотреться, то видно, что способ построения не только прост, но и в некотором роде повторяет построение любого json-объекта. С одной небольшой разницей в синтаксисе - вместо ":" нужно ставить запятую, а вместо определения объекта через "{}" нужно использовать "new object [] {}".
Теперь, вы можете динамически составлять json любой сложности, без каких-либо ограничений.
☕ Понравился обзор? Поделитесь с друзьями!
-
-
-
-
✎Группировка данных по элементам диапазона в MSSQL Код
-
-
-
-
-
-