在 ASP.NET MVC 的 RAZOR 视图中呈现 JSON



我正在开发一个 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" }
  ]  
}

服务的结果存储在我的模型中名为 ResultsJObject 属性中。对于每个数组,我正在尝试打印出其键名。然后,我想浏览并打印出数组中的每个值和总计。换句话说,上面的 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>
}                    

显然,上述内容是行不通的。我的挑战是,我不明白如何:

  1. 循环访问 JObject 中的键/值对。
  2. 确定该值是 JArray 还是另一个 JObject。

如果我使用 result.Children() ,我不会像我期望的那样获得每个键/值对。同时,result没有我期望的Keys财产。此刻我感到非常卡住。

感谢您提供的任何帮助。节日快乐!

根据JObject的文档,它应该实现IDictionary<string, JToken>。他们可能已经完成了接口的显式实现,因此您需要先将 JObject 实例强制转换为IDictionary<string, JToken>

首先定义一些与 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>

为了使其更简洁,请编写一个 HtmlHelper,该 HtmlHelper 接收IList<Row>作为参数并以所需的格式呈现它,因此最后您将以类似以下内容结尾:

@YourHelper(Model.Result.Group)
@YourHelper(Model.Result.Class)
@YourHelper(Model.Result.Status)

相关内容

  • 没有找到相关文章

最新更新