Динамически создавайте представление типа List из объекта Json в MVC3 - PullRequest
1 голос
/ 16 ноября 2011

У меня есть контроллер, который обращается к службе WCF, которая возвращает объект Json (коллекцию).Все строки относятся к одному и тому же типу, но при разных вызовах структура строк различна (возвращаемый объект получается из пользовательского sql-запроса, выполняемого с executeReader и сериализованного как Json. Так что я не знаю структуру строки заранее.

Мне нужен простой способ передать эту строку Json во что-то, что сгенерирует представление списка типов на лету для него. Не имеет значения форматирование и т. Д., Просто должно быть легко выведено в виде таблицы.

Кто-нибудь знает, как я могу это сделать?

Другой вариант может состоять в том, чтобы иметь что-то, что генерирует представление на лету для IEnumerable анонимных объектов (так как использование this Iможет преобразовать JSON в список анонимных)


РЕДАКТИРОВАТЬ

Я нашел кое-что, что делает в значительной степени то, что мне нужно, за исключением отображения метаданных о переданном объекте.

Это preetyPrint.js , и я интегрировал его на своей странице, как показано ниже: В моем контроллере я установил для объекта json результата значение ViewBag.Result, а впросмотр Я использовал этот код:

    <script src="@Url.Content("~/Scripts/prettyprint.js")" type="text/javascript">    </script>
    <div id="resultGrid"></div>
    <script>
    var resultObject = @Html.Raw(ViewBag.Result);            
    var ppTable = prettyPrint(resultObject);
    document.getElementById('resultGrid').appendChild(ppTable);         
    </script>

Кто-нибудь знает такой сценарий, который на самом деле «дамп» данных вместо метаданных?Спасибо.

1 Ответ

1 голос
/ 16 ноября 2011

Вам следует создать класс для десериализации, если вы знаете свойства строки.Затем используйте класс JavaScriptSerializer для десериализации списка созданного вами нового класса.Затем вы можете взглянуть на класс WebGrid для вывода HTML-кода или просто вручную перебрать метаданные свойства в своем представлении.

Создание пользовательского класса предоставит вам возможностьиспользовать метаданные для управления форматированием или другими отображаемыми атрибутами вывода.

Если вы не можете создать пользовательский класс, вы всегда можете использовать Json.NET или JavaScriptSerializer для десериализации в список объектов словаря или ExpandoObject / Dynamic или что-то в этом роде.Тогда вам придется написать что-то вручную, чтобы перебрать ключи, я думаю.ModelMetadataProvider в MVC может справиться с этим, что позволит вам просто перебрать свойства в вашем коде представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...