我正在开发一个ASP.NET MVC应用程序。我的应用程序正在与第三方REST服务进行交互。该服务正在我的MVC应用程序的控制器中调用。服务的结果如下:
{
"group@odata.type": "#Collection",
"group": [],
"class@odata.type": "#Collection",
"class":[
{ "total": 111, "value": "A" },
{ "total": 222, "value": "B" },
{ "total": 333, "value": "C" }
],
"status@odata.type": "#Collection",
"status": [
{ "total": 1, "value": "Open" },
{ "total": 20, "value": "Closed" },
{ "total": 51, "value": "Unknown" }
]
}
服务结果存储在名为JObject
的模型中的Results
属性中。对于每个阵列,我都试图打印出它的关键名称。然后,我想查看并打印出数组中的每个值和总数。换句话说,上面的JSON看起来像这样:
group
class
A - 111
B - 222
C - 333
status
Open - 1
Closed - 20
Unknown - 51
为了尝试这样做,我在视图中有以下内容。
foreach (var result in Model.Results)
{
<div></div>
<ul>
@foreach (var subResult in result.?)
{
<li style="padding-left:8px;">@(subResult["value"] + " - " + subResult["total"])</li>
}
</ul>
}
显然上述情况不起作用。我的挑战是,我不明白如何:
如果我使用result.Children()
,我不会像我期望的那样获得每个键/值对。与此同时,result
没有像我期望的Keys
属性。我现在感到很困惑。
感谢您提供的任何帮助。节日快乐!
答案 0 :(得分:1)
根据JObject
上的documentation,它应该实现IDictionary<string, JToken>
。他们可能已经完成了接口的显式实现,因此您需要首先将JObject实例强制转换为IDictionary<string, JToken>
。
答案 1 :(得分:0)
首先定义一些与您的Json响应相对应的类:
public class ServiceResponce
{
public IList<Row> Group{get;set;}
public IList<Row> Class{get;set;}
public IList<Row> Status{get;set;}
}
public class Row
{
public int Total {get;set;}
public string Value {get;set;}
}
您可以使用Json.Net或其他一些库将Json反序列化为对象:
JsonConvert.DeserializeObject<ServiceResponce>(json);
所以你的模型最终会有ServiceResponce
属性:
public ServiceResponce Result{get;set;}
您可以轻松浏览ServiceResponce属性:
<div></div>
<ul>
foreach (var result in Model.Result.Group)
{
<li style="padding-left:8px;">@(result.Value + " - " + result.Total)</li>
}
<ul>
为了使它更清晰,可以编写一个接收IList<Row>
作为参数的HtmlHelper并以所需的格式呈现它,所以最后你会得到类似的结果:
@YourHelper(Model.Result.Group)
@YourHelper(Model.Result.Class)
@YourHelper(Model.Result.Status)