[英]ASP.Net Core Import JSON from external API
我是 .NET Core 主页的新手,有人可以指导我完成此操作。
我需要向这个 url 发出请求并将数据保存到数据库中: url: 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();
我被困在这里,无法继续。 如何获取数据,我只需要:确认、恢复、死亡和上次更新
请。 任何人在这里帮助...
您需要将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; }
}
你可以 fork 或下载这个 repo: https : //github.com/fatihyildizhan/CoronaParser
你的模态应该是
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/
我建议你使用 JSon.NET 又名 Newtonsoft。 您可以从 nuget 包管理器添加它。 这是将传入的 json 数据映射到自定义类 Total 的代码。 只需添加您的类构造函数,它将 json 数据作为字符串类型的参数,并且我添加了一种方法来缩短代码
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; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.