ASP.Net Core从外部API导入JSON

问题描述 投票:1回答:3

我对.NET Core的家庭都是陌生的,有人可以指导我进行此操作。

我需要对此网址进行请求,并将数据保存到数据库中:网址:https://covid19.mathdro.id/api

JSON输出看起来像这样:

{"confirmed":{"value":303001,"detail":"https://covid19.mathdro.id/api/confirmed"},"recovered":{"value":91669,"detail":"https://covid19.mathdro.id/api/recovered"},"deaths":{"value":12762,"detail":"https://covid19.mathdro.id/api/deaths"},"dailySummary":"https://covid19.mathdro.id/api/daily","dailyTimeSeries":{"pattern":"https://covid19.mathdro.id/api/daily/[dateString]","example":"https://covid19.mathdro.id/api/daily/2-14-2020"},"image":"https://covid19.mathdro.id/api/og","source":"https://github.com/mathdroid/covid19","countries":"https://covid19.mathdro.id/api/countries","countryDetail":{"pattern":"https://covid19.mathdro.id/api/countries/[country]","example":"https://covid19.mathdro.id/api/countries/USA"},"lastUpdate":"2020-03-21T20:13:21.000Z"}

型号:总计

public class Total
{
    [Key]
    public int Id { get; set; }
    [Column(TypeName = "int")]
    [Required]
    public string Confirmed { get; set; }
    [Column(TypeName = "int")]
    [Required]
    public string Recovered { get; set; }
    [Column(TypeName = "int")]
    [Required]
    public string Deaths { get; set; }
    [Column(TypeName = "datetime2")]
    [Required]
    public string LastUpdated { get; set; }
}

我的导入模型:

client.BaseAddress = new Uri("https://covid19.mathdro.id/api");
var response = await client.GetAsync($"");
response.EnsureSuccessStatusCode();
var stringResult = await response.Content.ReadAsStringAsync();

我被困在这里,无法继续。我该如何获取数据,我只需要:确认,恢复,死亡和lastUpdate

请有人在这里帮助...

c# json asp.net-core asp.net-core-webapi
3个回答
0
投票

我建议您使用JSon.NET或Newtonsoft。您可以从nuget软件包管理器添加它。这是将传入的json数据映射到您的自定义类Total的代码。只需添加您的类构造函数,它将json数据作为typeof字符串作为参数,然后我添加了一种方法来使代码更短

public class Total {

    public Total(string json) {
        JObject jObject = JObject.Parse(json);
        Confirmed = GetStringFromJToken(jObject, "confirmed");
        Recovered = GetStringFromJToken(jObject, "recovered");
        Deaths = GetStringFromJToken(jObject, "deaths");

        LastUpdated = (string)jObject["lastUpdate"];
    }

    private string GetStringFromJToken(JObject jObject, string key) {
        JToken keyToken = jObject[key];
        return (string)keyToken["value"];
    }

    [Key]
    public int Id { get; set; }
    [Column(TypeName = "int")]
    [Required]
    public string Confirmed { get; set; }
    [Column(TypeName = "int")]
    [Required]
    public string Recovered { get; set; }
    [Column(TypeName = "int")]
    [Required]
    public string Deaths { get; set; }
    [Column(TypeName = "datetime2")]
    [Required]
    public string LastUpdated { get; set; }
}

0
投票

您需要将JSON强制转换为Class Object。您可以使用NewtonSoft.Json

这样获得数据
using (var client = new HttpClient())
{
  string url = string.Format("https://covid19.mathdro.id/api");
  var response = client.GetAsync(url).Result;

  string responseAsString = await response.Content.ReadAsStringAsync();
  result = JsonConvert.DeserializeObject<CovidResult>(responseAsString);
}

public class CovidResult
{
   [JsonProperty("confirmed")]
   public ValueModel Confirmed { get; set; }
   [JsonProperty("recovered")]
   public ValueModel Recovered { get; set; }
   [JsonProperty("deaths")]
   public ValueModel Deaths { get; set; }
}

public class ValueModel
{
   [JsonProperty("value")]
   public int Value { get; set; }
}

您可以分叉或下载此仓库:https://github.com/fatihyildizhan/CoronaParser


0
投票

您的情态应该是

public class Total
{
    public Confirmed confirmed { get; set; }
    public Recovered recovered { get; set; }
    public Deaths deaths { get; set; }
    public string dailySummary { get; set; }
    public DailyTimeSeries dailyTimeSeries { get; set; }
    public string image { get; set; }
    public string source { get; set; }
    public string countries { get; set; }
    public CountryDetail countryDetail { get; set; }
    public DateTime lastUpdate { get; set; }
}

public class Confirmed
{
    public int value { get; set; }
    public string detail { get; set; }
}

public class Recovered
{
    public int value { get; set; }
    public string detail { get; set; }
}

public class Deaths
{
    public int value { get; set; }
    public string detail { get; set; }
}

public class DailyTimeSeries
{
    public string pattern { get; set; }
    public string example { get; set; }
}

public class CountryDetail
{
    public string pattern { get; set; }
    public string example { get; set; }
}

如果stringResult具有实际值,您要做的就是:

JsonConvert.DeserializeObject<Total>(stringResult);

此外,如果对模式有疑问,可以随时使用http://json2csharp.com/

© www.soinside.com 2019 - 2024. All rights reserved.