Как получить данные из объекта JSON в MVC

1

У меня есть следующий объект JSON, где хранятся все данные.

[{"id":1,"CoinValue":"0.01","Count":82,"CoinWeight":76},
{"id":2,"CoinValue":"0.02","Count":86,"CoinWeight":18},
{"id":3,"CoinValue":"0.05","Count":29,"CoinWeight":42},
{"id":4,"CoinValue":"0.1","Count":35,"CoinWeight":90},
{"id":5,"CoinValue":"0.2","Count":23,"CoinWeight":3},
{"id":30,"CoinValue":"0.5","Count":41,"CoinWeight":36}]

Я хочу получить CoinValue и Count каждой записи для отображения в графиках Google. В настоящее время у меня есть представление, вызывающее метод Data Data в контроллере Coin для получения данных, но я не могу заставить это работать.

CoinController:

    public ActionResult Data()
    {
        //Read Json object
        var fileContents = System.IO.File.ReadAllText(@"H:\EasyAsPiMVC\EasyAsPiMVC\App_Data\MOCK_DATA.json");

        //not sure how to properly pass this data to the view 

        return Json(fileContents);
    }

Javascript для просмотра и отображения данных

<script type="text/javascript">
$(document).ready(function () {
    $.ajax({
        type: 'POST',
        dataType: "Json",
        contentType: "application/json",
        url: '@Url.Action("Data", "Coin")',
        success: function (result) {
            google.charts.load('current', {
                'packages': ['corechart']
            });
            google.charts.setOnLoadCallback(function () {
                drawChart(result);
            });
        }
    });

    function drawChart(result) {
        var data = new google.visualization.DataTable();
        data.addColumn("string", "CoinValue"); //might have to be changed
        data.addColumn("number", "Count");
        var dataArray = [];
        $.each(result, function (i, obj) {
            dataArray.push([obj.CoinValue, obj.Count]);
        });
        data.addRows(dataArray);

        var piechart_options = {
            title: 'Coin Tracker Piechart',
            width: 400,
            height: 300
        };

        var piechart = new google.visualization.PieChart(document.getElementById('piechart_div'));
        piechart.draw(data, piechart_options);

        var barchart_options = {
            title: 'Coin Tracker barchart',
            width: 400,
            height: 300,
            legend: 'none'
        };

        var barchart = new google.visualization.BarChart(document.getElementById('barchart_div'));
        barchart.draw(data, barchart_options);
    }
});
</script>

Я программист noob и не смог понять это уже более суток. Я провел много исследований, но я просто не могу заставить это работать.

  • 0
    использование angular поможет вам в долгосрочной перспективе - не ответ, а скорее рекомендация.
  • 0
    что у тебя не работает? вы получаете какие-либо ошибки?
Теги:
model-view-controller
asp.net-mvc-5

1 ответ

1
Лучший ответ

Метод ReadAllText предоставляет вам string, которая является содержимым файла. Вам нужно десериализовать его в список объектов Coin. Код на стороне клиента ожидает массив объектов, каждый из которых CoinValue свойство CoinValue и Count. Поэтому вам нужно вернуть этот массив json.

Вот как вы это сделаете с JSON.NET

[HttpPost]
public ActionResult Data()
{
    var path = "Path to your JSON file goes here";
    var fileContents = System.IO.File.ReadAllText(path);
    var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Coin>>(fileContents);
    return Json(list);
}
  • 0
    Чем раньше, я пытался что-то очень похожее на это ранее, но использовал другой класс модели, который просто содержал список объектов монет, которые не работали. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню