我已经将JSON响应反序列化为一个对象.什么是下一个步骤?我有一个正在使用JSON对象的WebAPI控制器.我需要获取这些数据并将其移到视图中,以便可以将其连接到Web组件.
我想我是否应该在控制器或视图中遍历JSON对象感到困惑?我有以下几点:
var model = JsonConvert.DeserializeObject<MyData.RootObject>(Data);
foreach (var record in Data.rows)
{
foreach (var nestedRecord in record.f)
{
List<string> list = new List<string>();
list.Add(nestedRecord.v);
}
}
return View();
另外,我正在遍历此模型,由于它不在范围内,因此无法在视图中返回该模型.
解决方法:
我在这里看到两个流行的选项,具体取决于您可能从反序列化对象中访问多少信息.一种,使用MyData.RootObject作为模型,并在视图中对其进行迭代.如果您需要访问对象的其他属性,这将为您提供最大的灵活性:
var model = JsonConvert.DeserializeObject<MyData.RootObject>(Data);
return View(model);
在视图中(此无序列表标记只是一个示例),您可能具有:
@model MyData.RootObject
<ul>
@foreach (var record in Model.rows)
{
foreach (var nestedRecord in record.f)
{
<li>@nestedRecord.v</li>
}
}
</ul>
或者,按照您的计划继续进行,但是使用列表作为模型,将要填充的列表移至for循环之外.就在视图中渲染对象而言,这将是最不灵活的方法:
var rootObject = JsonConvert.DeserializeObject<MyData.RootObject>(Data);
List<string> list = new List<string>();
foreach (var record in rootObject.rows)
{
foreach (var nestedRecord in record.f)
{
list.Add(nestedRecord.v);
}
}
return View(list);
在这种情况下,您的看法(比其他选择更为简洁):
@model System.Collections.Generic.List<string>
<ul>
@foreach (var record in Model)
{
<li>@record</li>
}
</ul>