Как проанализировать данные JSON из API остальных с помощью C # в модели ASP.Net Core MVC и отобразить их на странице HTML - PullRequest
0 голосов
/ 21 января 2019

Я создаю основное приложение MVC ASP.Net для извлечения и отображения текущих валют с их значениями удобным для пользователя способом на моей html-странице. Я использую API-интерфейс cryptocompare для получения этих значений.

Ответ Json, который я получаю от API:

{"EUR":{"BTC":0.0003188,"USD":1.14}}

EUR.cs

namespace ProjectFinanceHub.Models
{

    public class EUR
    {
        public double BTC { get; set; }
        public double USD { get; set; }
    }

}

HomeController.cs Ниже я удалил свой личный ключ API и заменил его 'your_api_here'

namespace ProjectFinanceHub.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public async Task<ActionResult> EUR()
    {
        var req = WebRequest.Create(@"https://min-api.cryptocompare.com/data/pricemulti?fsyms=EUR&tsyms=BTC,USD,EUR&api_key=your_api_here");
        var r = await req.GetResponseAsync().ConfigureAwait(false);

        var responseReader = new StreamReader(r.GetResponseStream());
        var responseData = await responseReader.ReadToEndAsync();

        var d = Newtonsoft.Json.JsonConvert.DeserializeObject<EUR>(responseData);
        return View(d);
     }
    }
 }

EUR.cshtml

@model ProjectFinanceHub.Models.EUR

<h2>@Model.BTC</h2> <!-- Should display 0.0003188 for example-->
<h3>@Model.USD</h3> <!-- Should display 1.13 for example-->

В настоящее время я получаю значения 0 для обоих BTC и USD, ожидаемые значения - это те, что указаны в ответе json

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Что решило мою проблему, так это смешанное решение между внесением изменений, указанных @Anu, а также благодаря https://stackoverflow.com/a/17788118/9864898 Я переконфигурировал свой контроллер как таковой

public async Task<ActionResult> EUR()
    {
        // output is {"EUR":{"BTC":0.0003188,"USD":1.13,"EUR":1}} for the below api at time of request
        var req = WebRequest.Create(@"https://min-api.cryptocompare.com/data/pricemulti?fsyms=EUR&tsyms=BTC,USD&api_key=your_api_key");
        var r = await req.GetResponseAsync().ConfigureAwait(false);

        var responseReader = new StreamReader(r.GetResponseStream());
        var responseData = new JsonTextReader(responseReader);

        var serializer = new JsonSerializer();

        var d = serializer.Deserialize<RootObject>(responseData);
        return View(d.EUR);
    }
0 голосов
/ 21 января 2019

Вам нужно обернуть EUR корневым элементом

public class EUR
{
    public double BTC { get; set; }
    public double USD { get; set; }
}

public class RootObject
{
    public EUR EUR { get; set; }
}

Объект DeserializeObject необходимо изменить на

var d = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(responseData);

Пожалуйста, убедитесь, что ваш возврат d.EUR.

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