如何使用C#MVC呈现JSON文件

时间:2018-02-28 19:50:02

标签: c# json asp.net-mvc razor

我需要使用MVC在C#中呈现JSON文件。

我写了

在控制器中

public ActionResult Index()
{
    List<string> Title = new List<string>();

    using (StreamReader streamreader = new StreamReader(path))
    {
        var json = streamreader.ReadToEnd();
        Rootobject RO = JsonConvert.DeserializeObject<Rootobject>(json);

        Title = RO.items.Select(x => x.title).ToList();
    }

    return View(Title);
}

在模型中

public class Rootobject
{
    public Item[] items { get; set; }
    public bool has_more { get; set; }
    public int quota_max { get; set; }
    public int quota_remaining { get; set; }
}

public class Item
{
    public string[] tags { get; set; }
    public Owner owner { get; set; }
    public bool is_answered { get; set; }
    public int view_count { get; set; }
    public int answer_count { get; set; }
    public int score { get; set; }
    public int last_activity_date { get; set; }
    public int creation_date { get; set; }
    public int question_id { get; set; }
    public string link { get; set; }
    public string title { get; set; }
    public int last_edit_date { get; set; }
}

public class Owner
{
    public int reputation { get; set; }
    public int user_id { get; set; }
    public string user_type { get; set; }
    public int accept_rate { get; set; }
    public string profile_image { get; set; }
    public string display_name { get; set; }
    public string link { get; set; }
}

在视图中

@model IEnumerable<ProjectName.Models.Item>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var d in Model)
{
    <li>@d.title</li>
}

打开网页后出错了。我需要列出JSON文件的所有标题,但我无法获取列表。所以我需要的是在html文件中呈现数据

1 个答案:

答案 0 :(得分:1)

您在视图中将模型声明为IEnumerable<ProjectName.Models.Item>,但您从控制器返回字符串列表。

根据IEnumerable<string>更新模型并更新循环。

在视图中

@model IEnumerable<string>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var title in Model) {
    <li>@title</li>
}

如果要返回更多详细信息,请从控制器返回所需信息。

public ActionResult Index() {
    var items = new List<ProjectName.Models.Item>();

    using (var streamreader = new StreamReader(path)) {
        var json = streamreader.ReadToEnd();
        Rootobject RO = JsonConvert.DeserializeObject<Rootobject>(json);

        items = RO.items.ToList();
    }

    return View(items);
}

并相应地更新视图

例如。

@model IEnumerable<ProjectName.Models.Item>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
<ul>
@foreach (var item in Model) {
    <li>
    <h4>@item.title</h4>
    @foreach (var tag in item.tags) {
        <p>@tag</p>
    }
    </li>
}
</ul>