【问题标题】:MVC convert json stored as a stringMVC 转换 json 存储为字符串
【发布时间】:2016-01-27 03:07:12
【问题描述】:

我有一个模型对象

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 对象。如何将字符串转换为视图中的对象?我正在尝试遍历该对象并显示在屏幕上

@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>

【问题讨论】:

标签: javascript c# asp.net-mvc model-view-controller


【解决方案1】:

显示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>

    }
 }

【讨论】:

  • 这就是我想要做的。除了我想要 var json = model.ToDoList
  • var json = model.ToDoList; List jsonObject = Newtonsoft.Json.JsonConvert.DeserializeObject>(json); foreach(jsonObject 中的变量项){
    @item.dueDate @item.taskId
    }
  • 如果这个答案对你有帮助,请补上。
【解决方案2】:

您可以使用 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);

似乎它更适合在视图之外进行这种解析。

【讨论】:

    【解决方案3】:

    首先,您应该阅读有关 NewtonJson 的信息并从她的http://www.newtonsoft.com/json 下载。

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

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

    那么在你的 Enrollment 类中你应该做这样的事情

    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",...}
    

    with model.ApplyJson("{ "completed": false, "taskId": "in01",...}")

    因此,在 @Html.DisplayFor(model => Model.ToDoList) 中,您将拥有 ListItem 项目的列表,您可以做任何您想做的事情。

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 2018-06-28
      • 2018-07-04
      • 2012-10-26
      • 2011-06-28
      • 2012-10-06
      • 1970-01-01
      相关资源
      最近更新 更多