Привет в настоящее время я разрабатываю маленькую систему используя API страницы https://smn.cna.gob.mx / быть / web-service-api, которая функционирует следующего способа, дав click, загружается файл .gz, который нужно разжимать и приходит файл со всей информацией о климате всех состояний со всеми городами Мексики, результат это бросает в JSON.
В моей программе уже я могу загружать это в автоматическом и показывать это в консоли, но сейчас мой вопрос: как я могу выдавать эту информацию об этом JSON по имени города и ты подпираешь мочь сохранять эту информацию в переменных в моей программе?
static void Main(string[] args)
{
GetRequest("https://smn.cna.gob.mx/webservices/index.php?method=1");
Console.ReadLine();
Console.ReadKey();
}
async static void GetRequest(String url)
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(url)) //obtener una variable con la info del url
using (var content = await response.Content.ReadAsStreamAsync()) //obtener la info del archivo
using (var descomprimido = new GZipStream(content, CompressionMode.Decompress)) //descomprimir el archivo
{
if (response.IsSuccessStatusCode)
{
StreamReader reader = new StreamReader(descomprimido);
String data = reader.ReadLine(); // aqui data ya tiene toda la información del archivo, este es el que necesito filtrar
Console.WriteLine(data); //Esto es solo para mostrarlo en consola
StreamWriter escritura = File.CreateText("ejemplo122.txt");
escritura.WriteLine(data); //Y aqui simplemente cree un archivo para visualizar mejor la información
escritura.Close();
}
}
}
Тогда: как мог бы выдавать я эту информацию из-за города, и от которого форма я мог бы получать информацию, чтобы добавлять их к моим переменным? Это пример информации, которая бросает меня
{"CityId":"MXAS0002",
"Name":"Aguascalientes",
"StateAbbr":"AGU",
"DayNumber":"0",
"ValidDateUtc":"20190318T000000Z",
"LocalValidDate":"20190318T070000Z",
"HiTempF":"77",
"LowTempF":"47",
"HiTempC":"25",
"LowTempC":"8",
"PhraseDay":"Nuboso. Máxima de 25 C. Vientos del OSO de 15 a 30 km/h.",
"PhraseNight":"Cielo mayormente despejado. Mínima de 8 C. Vientos del NNO de 15 a 25 km/h.",
"SkyText":"Nublado",
"ProbabilityOfPrecip":"0",
"RelativeHumidity":"22",
"WindSpeedMph":"15",
"WindSpeedKm":"24",
"WindDirection":"241",
"WindDirectionCardinal":"OSO",
"CloudCoverage":"77",
"UvIndex":"10",
"UvDescription":"Muy Alto",
"IconCode":"67",
"IconCodeNight":"97",
"SkyTextNight":"Despejado",
"Latitude":"21.87982",
"Longitude":"-102.296"}
Чтобы мочь манипулировать этим первым Json ты должен parsearlo или mГЎs хорошо превращать это в объект, которым ты мог бы манипулировать.
Для этого ты должен создавать класс со свойствами, сходными с теми, которые возвращает твой Json.
Public class InfoClima
{
public string CityId { get; set;}
public string Name { get; set;}
public string StateAbbr { get; set;}
public string DayNumber { get; set;}
public string ValidDateUtc { get; set;}
public string LocalValidDate { get; set;}
public string HiTempF { get; set;}
public string LowTempF { get; set;}
public string HiTempC { get; set;}
public string LowTempC { get; set;}
public string PhraseDay { get; set;}
public string PhraseNight { get; set;}
public string SkyText { get; set;}
public string ProbabilityOfPrecip { get; set;}
public string RelativeHumidity { get; set;}
public string WindSpeedMph { get; set;}
public string WindSpeedKm { get; set;}
public string WindDirection { get; set;}
public string WindDirectionCardinal { get; set;}
public string CloudCoverage { get; set;}
public string UvIndex { get; set;}
Public string UvDescription { get; set;}
public string IconCode { get; set;}
public string IconCodeNight { get; set;}
public string SkyTextNight { get; set;}
public string Latitude { get; set;}
public string Longitude { get; set;}
}
И в твоем коде обращать твой json в класс (предполагая, что api возвратил тебе несколько объектов а именно, Хсон Арраи иначе он удаляет часть List<>
).
var listInfo = JsonConvert.DeserializeObject<List<InfoClima>>(data);
Это возвращает список информации о климате и чтобы получать каждый город или informaciГіn мы повторяем ее с циклом.
foreach (var info in listInfo)
{
Console.WriteLine( string.Format("id:{0}, nombre de ciudad:{1}", info.CityId, info.Name));
}
использовал книжный магазин Newtonsoft ты можешь загружаться с пакетов nugets.
Замечает: В свойствах класса я добавил типы данных, что ты показываешь а именно string
а следовательно ты должен проверять это в ней documentaciГіn api или делать несколько доказательств.
Если ты получаешь json
этот, могут deserializar в класс, чтобы брать из этой данные
Для этого ты нуждаешься в книжном магазине json.net
, которую ты добавляешь используя nuget
имея json может создавать класс .net для deserializarla, которую ты получаешь используя
, его оставаясь немного как это
public class RootObject
{
public string CityId { get; set; }
public string Name { get; set; }
public string StateAbbr { get; set; }
public string DayNumber { get; set; }
public string ValidDateUtc { get; set; }
public string LocalValidDate { get; set; }
public string HiTempF { get; set; }
public string LowTempF { get; set; }
public string HiTempC { get; set; }
public string LowTempC { get; set; }
public string PhraseDay { get; set; }
public string PhraseNight { get; set; }
public string SkyText { get; set; }
public string ProbabilityOfPrecip { get; set; }
public string RelativeHumidity { get; set; }
public string WindSpeedMph { get; set; }
public string WindSpeedKm { get; set; }
public string WindDirection { get; set; }
public string WindDirectionCardinal { get; set; }
public string CloudCoverage { get; set; }
public string UvIndex { get; set; }
public string UvDescription { get; set; }
public string IconCode { get; set; }
public string IconCodeNight { get; set; }
public string SkyTextNight { get; set; }
public string Latitude { get; set; }
public string Longitude { get; set; }
}
для потом deserializar используя
CГіmo использовать JSON в.NET fГЎcilmente с C#
//resto codigo
var result = JsonConvert.DeserializeObject<RootObject>(data);
после того, как иметь класс, может соглашаться на свойства