Как выдавать информацию о StreamReader?

Привет в настоящее время я разрабатываю маленькую систему используя 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"}

0
задан 21.03.2019, 13:56
2 ответа

Чтобы мочь манипулировать этим первым 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 или делать несколько доказательств.

0
ответ дан 02.12.2019, 05:21
  • 1
    Большое спасибо также intentaré и я жду и вытеките – André Ibarra 21.03.2019, 07:03
  • 2
    Я обновил ответ – denifer santiago fernandez 21.03.2019, 07:09
  • 3
    Большое спасибо, если funcionó – André Ibarra 24.03.2019, 01:50

Если ты получаешь json этот, могут deserializar в класс, чтобы брать из этой данные

Для этого ты нуждаешься в книжном магазине json.net, которую ты добавляешь используя nuget

Newtonsoft. Json nuget

имея json может создавать класс .net для deserializarla, которую ты получаешь используя

http://json2csharp.com/

, его оставаясь немного как это

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);

после того, как иметь класс, может соглашаться на свойства

0
ответ дан 02.12.2019, 05:21
  • 1
    Большое спасибо intentaré и чтобы видеть, что он выходит – André Ibarra 21.03.2019, 07:01
  • 2
    Большое спасибо, если funcionó – André Ibarra 24.03.2019, 01:50