Я хочу разработать приложение для погоды для windows phone. Я создал простой пользовательский интерфейс для тестирования. Содержит одну сетку с текстовым полем и кнопкой, чтобы ввести название города. Вторая сетка имеет разные метки для отображения данных о погоде после нажатия кнопки.Извлечение данных из вложенных Json в C#
Я использую API из openweathermap.org .I сделали классы из данных Json:
{"coord":{"lon":-120.5,"lat":47.5},"sys":{"message":0.195,"country":"US","sunrise":1384787560,"sunset":1384820527},"weather":[{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}],"base":"gdps stations","main":{"temp":277.15,"pressure":1010,"humidity":86,"temp_min":277.15,"temp_max":277.15},"wind":{"speed":0.31,"deg":230.5},"rain":{"3h":1},"clouds":{"all":1},"dt":1384797300,"id":5815135,"name":"Washington","cod":200}
И классы:
public class Coord
{
public double lon { get; set; }
public double lat { get; set; }
}
public class Sys
{
public double message { get; set; }
public string country { get; set; }
public int sunrise { get; set; }
public int sunset { get; set; }
}
public class Weather
{
public int id { get; set; }
public string main { get; set; }
public string description { get; set; }
public string icon { get; set; }
}
public class Main
{
public double temp { get; set; }
public double temp_min { get; set; }
public double temp_max { get; set; }
public double pressure { get; set; }
public double sea_level { get; set; }
public double grnd_level { get; set; }
public int humidity { get; set; }
}
public class Wind
{
public double speed { get; set; }
public double deg { get; set; }
}
public class Clouds
{
public int all { get; set; }
}
public class RootObject
{
public Coord coord { get; set; }
public Sys sys { get; set; }
public List<Weather> weather { get; set; }
public string { get; set; }
public Main main { get; set; }
public Wind wind { get; set; }
public Clouds clouds { get; set; }
public int dt { get; set; }
public int id { get; set; }
public string name { get; set; }
public int cod { get; set; }
}
Я использую Json.NET для извлечение данных из полученных json.My Json данных не имеют списка, а один объект. Я видел примеры того, как список может быть привязан к ListItem в xaml. Но я не знаю, как это сделать на одном объекте. XAML:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="boxOfSearch" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="8*"/>
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<TextBox x:Name="getEnteredString" Margin="2,1"/>
<Button Grid.Column="1" x:Name="btnGet" Tap="btnGet_Tap">Go</Button>
<!--<Button x:Name="goButton" Content="Go" Grid.Column="1" Margin="2,1" Click="goButton_Click"/>-->
</Grid>
<Grid Grid.Row="1" x:Name="extractedData" Height="532">
<Grid.RowDefinitions>
<RowDefinition Height="3*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<TextBlock x:Name="getName" Text="{Binding name}" Margin="2,2,2,5" Foreground="#FF176EB5" FontSize="48" TextAlignment="Center" />
То, что я хочу, чтобы иметь выход являются: Название города, высокой и низкой температуры temperature.Name и из разных classes.If я могу получить эти значения отдельно его может быть отличной отправной точкой для меня.
private void btnGet_Tap(object sender, GestureEventArgs e)
{
WebClient wc = new WebClient();
wc.DownloadStringAsync(new Uri(""));
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
}
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
MessageBox.Show(e.Result);
var rootObj=JsonConvert.DeserializeObject<RootObject>(e.Result); //Getting DeserializedObject in a variable
getJsonStrTxtBox.Text = rootObj.name; // var.name where name (Name of the City) is a string in RootObject class
} //like var.name add var.main.temp_max
Теперь я могу получить любые данные из вложенного json. Json.net и @evanmcdonnal большое спасибо.
Мне удалось получить название города с. Использование объекта.name или вашего упомянутого имени response.name уже. Но максимальный и минимальный темратура находятся в другом классе с именем «Main», а Path - RootObject -> Main. –
@NavS жаль, что я недостаточно читал ваши определения классов, обновляя приход. – evanmcdonnal
Большое спасибо. Он работал. Иногда вы не можете получить даже простейшие вещи, если кто-то не там, чтобы вести вас. –