从MVC3中的Json对象动态创建List类型视图

时间:2011-11-16 15:22:55

标签: json asp.net-mvc-3 view

我有一个控制器,可以访问返回Json对象(集合)的WCF服务。所有行都是相同的类型,但在不同的调用中,行stricture是不同的(返回对象来自用户构建的sql查询,使用executeReader执行并序列化为Json 所以我不知道前面的行结构。

我需要的是一种简单的方法来将这个Json字符串传递给将动态生成类型列表视图的东西。格式化等无关紧要,只需将其作为表格轻松输出。

有谁知道我怎么能做到这一点?

另一种选择可能是为IEnumerable的匿名对象提供动态生成视图的东西(因为使用this我可以将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 个答案:

答案 0 :(得分:1)

如果您知道行的属性,则应创建一个要反序列化的类。然后使用JavaScriptSerializer类反序列化到您创建的新类的列表。然后,您可以查看WebGrid类以输出HTML,或者只是手动迭代视图中的属性元数据。

创建自定义类将使您能够使用元数据来控制输出的格式或其他显示属性。

如果无法创建自定义类,则可以始终使用Json.NET或JavaScriptSerializer反序列化为字典对象列表或ExpandoObject / Dynamic或其他内容。然后你必须手动写一些东西来迭代我认为的键。 MVC中的ModelMetadataProvider可能能够处理这些,允许您只是迭代视图代码中的属性。