MVC 转换存储为字符串的 json

MVC convert json stored as a string

本文关键字:json 字符串 转换 存储 MVC      更新时间:2023-09-26

我有一个模型对象

model.ToDoList =  { "completed": false, "taskId": "in01", "memberName": "JD", "dueDate": "Mon Apr 25 16:09:18 EDT 2016" }, { "completed": false, "taskId": "in02", "memberName": "JD", "dueDate": "Mon Apr 25 16:09:18 EDT 2016" }, { "completed": false, "taskId": "in16", "memberName": "JD", "dueDate": "Wed Apr 20 16:09:18 EDT 2016" } ]

这是一个存储为字符串的 json 对象。如何将字符串转换为视图中的对象?我正在尝试循环浏览该 ojbect 并显示在屏幕上

@model Gallant.Models.Enrollment
<table class="table">
    <tr>
        <th>Completed</th>
        <th>Description</th>
        <th>Member</th>
        <th>Due Date</th>
        <th>Upload Document</th>
    </tr>
</table>
<div class="form-group">
    <div class="col-md-10">
        @Html.DisplayFor(model => Model.ToDoList)
    </div>
</div>

显示 json 的方法之一如下所示:

在您看来,只需使用 Newtonsoft.Json 对 json 进行反序列化并迭代即可。

@{
    var json= "{ 'completed': false, 'taskId': 'in01'}" ;
    Dictionary<string, string> jsonObject = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
    foreach(var item in jsonObject){
        <div>
            <label>@item.Key : </label>
            <span>@item.Value</span>
        </div>
    }
 }
您可以使用

Json.NET 将其反序列化为类实例或匿名对象。下面介绍了如何对匿名类型执行此操作,定义要反序列化的属性:

var result = new[]{ new { Completed = false, TaskId = "", MemberName = "", DueDate = "" } };
result = JsonConvert.DeserializeAnonymousType(model.TodoList, result);

或者到您自己的自定义类:

var result = JsonConvert.DeserializeObject<List<MyClass>>(model.TodoList);

不过,似乎更适合在视图之外进行此解析。

首先,你应该阅读NewtonJson并从她的 http://www.newtonsoft.com/json 下载。

其次,您应该创建一个包含 JSON 中所有字段的类。喜欢这个

public class ListItem
{
    public bool Completed { get; set; }
    public string TaskId { get; set; }
}

那么在你的注册班中,你应该做这样的事情

public class Enrolment
{
     public IEnumerable<ListItem> ToDoList{ get; private set; }
     public void ApplyJSON(string json)
     {
          //Magic :)
          YourList = JsonConvert.DeserializeObject<IEnumerable<ListItem>>(json);
     }
}

最后,更换您的生产线

model.ToDoList =  { "completed": false, "taskId": "in01",...}

与模型。ApplyJson("{ "已完成": false, "taskId": "in01",...}")

因此,在@Html.DisplayFor(model => Model.ToDoList)中,您将拥有ListItem项列表,您可以执行所需的任何操作。