Как десертировать и пройти через JSON - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь десериализовать свой JSON с помощью newtonsoftjson, поэтому я не могу перебрать его с помощью foreach.

Я знаю, что мне нужно смоделировать свой класс как мой объект JSON, и я думаю, что это здесь. .

Кроме того, я не совсем уверен, как реализовать пространство имен, поэтому я просто поместил его под @page, который не выбрасывает и выдает ошибку, так что я думаю, что все в порядке (если это не так, пожалуйста, дайте мне знать).

Мои файлы:

TodoItem.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1
{
    public class TodoItem
    {
        public List<Array> tasks { get; set; }
        public int id { get; set; }
        public string name{ get; set; }
    }
}

Tasks.json:

[
    {
        "tasks": [
            {
                "id": 1,
                "name": "Køb tøj"
            },
            {
                "id": 2,
                "name": "vask tøj"
            },
            {
                "id": 3,
                "name": "Gør Rent"
            }
        ]
    }
]

Index.cshtml:

@using WebApplication1
@{
    Layout = "_Layout.cshtml";

    var json = System.IO.File.ReadAllText("pathtojson");

    List<TodoItem> data = Newtonsoft.Json.JsonConvert.DeserializeObject<List<TodoItem>>(json);

}

    @{ 
        foreach(var item in data)
        {
            <p>@item</p>
        }
    }

1 Ответ

1 голос
/ 30 сентября 2019

У вас есть коллекция Tasks. Каждый Task имеет свойства Id и Name. Это можно смоделировать, разделив ваш класс и обновившись до следующего:

public class TodoItem
{
    public List<Task> Tasks { get; set; }
}

public class Task
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Затем вы можете десериализовать как:

TodoItem data = JsonConvert.DeserializeObject<TodoItem>(json);

foreach (var task in data.Tasks)
{
    Console.WriteLine($"Id: {task.Id}, Name: {task.Name}"); 
}

Вместо того, чтобы обрабатывать JSON в представлении, я бы десериализовалЗатем json в контроллере передает десериализованный json (модель) обратно в представление.

// controller
public IActionResult Index()
{
    var json = System.IO.File.ReadAllText("pathtojson");
    TodoItem data = JsonConvert.DeserializeObject<TodoItem>(json);

    return View(data);    // pass the data the your view
}

// razor view
@model WebApplication1.Models.TodoItem    // define model for view
@{
    Layout = "_Layout.cshtml";
}
@foreach (var task in Model.Tasks)
{
    <div>Id: @task.Id, Name: @task.Name</div>
}

Я создал скрипку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...