1

我是 C# 和 XAML 的新手,正在开发一个简单的天气应用程序,它可以让您搜索城市和州并返回格式化的 10 天预报列表。

我在使用 ListView显示从Wunderground Weather API检索到的数据时遇到问题。这是我正在使用的 JSON,例如。

我的问题:从 Wunderground API 获得结果后,如何通过 XAML 中显示项目属性(icon_url、title、fcttext)的模板运行所有列表项?

这是我的模型:

    公共类 ForecastList
        {
            公开课 Forecastday
            {
                公共字符串 icon_url { 获取;放; }
                公共字符串标题 { 获取;放; }
                公共字符串 fcttext { 获取;放; }
            }

            公共类 TxtForecast
            {
                公开列表预测日{获取;放; }
            }

            公开课预报
            {
                公共 TxtForecast txt_forecast { 获取;放; }
            }

            公共类 RootObject
            {
                公共预测预测 { 获取;放; }
            }
        }

XAML:

<Stack Layout Padding="30"> <StackLayout Orientation="Horizontal"> <Entry HorizontalOptions="FillAndExpand" Placeholder="City" x:Name="City" /> <Entry Placeholder="2 letter state" x:Name="State" /> </StackLayout> <Button Text="Search" Clicked="OnClicked" /> <ListView ItemsSource="{Binding ListSource}"> <ListView.ItemTemplate> <DataTemplate> <Label Text="{Binding Title}" /> <Label Text="{Binding FctText}" /> <Image Source="{Binding IconUrl}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> </StackLayout>

和视图模型:

    公共类 MainPageViewModel
        {
            公共异步任务 GetWeatherAsync(字符串 url)
            {
                HttpClient 客户端 = 新 HttpClient();
                client.BaseAddress = new Uri(url);

                var response = await client.GetAsync(client.BaseAddress);
                response.EnsureSuccessStatusCode();

                var JsonResult = response.Content.ReadAsStringAsync().Result;

                var 天气 = JsonConvert.DeserializeObject(JsonResult);
                设置列表(天气);
            }

            公共列表 ListSource { 获取;放; }

            私有字符串_title;
            公共字符串标题
            {
                得到
                {
                    返回_title;
                }
                放
                {
                    _title = 价值;
                }
            }

            私有字符串_fctText;
            公共字符串 FctText
            {
                得到
                {
                    返回_fctText;
                }
                放
                {
                    _fctText = 值;
                }
            }

            私有字符串_iconUrl;
            公共字符串 IconUrl
            {
                得到
                {
                    返回_iconUrl;
                }
                放
                {
                    _iconUrl = 值;
                }
            }

            private void SetList(ForecastList.RootObject 天气)
            {
                ListView listView = new ListView();
                var forecastList = weather.forecast.txt_forecast.forecastday;
                列表 listSource = new List(forecastList);

                列表来源 = 列表来源;

                listView.ItemsSource = ListSource;
            }
        }

干杯!

4

1 回答 1

2

您需要使用 Dto 将服务器数据转换为普通格式

例如 :

这是我的 Dto

public class SampleDto
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
}

像这样从服务器获取数据

public static async Task<T> GetResultFromApi<T>(string serviceUrl)
    {
        try
        {
            GetConnection();
             var response = await _httpClient.GetAsync(new Uri(yourUrl + serviceUrl));

            var stringAsync = await response.Content.ReadAsStringAsync();

            if (response.IsSuccessStatusCode)
            {
                var responseJson = stringAsync;

                return JsonConvert.DeserializeObject<T>(responseJson);
            }

            LoggingManager.Error("Received error response: " + stringAsync);
            return default(T);
        }
        catch (Exception exception)
        {
            LoggingManager.Error(exception);
            return default(T);
        }
    }

var gettingDto = await GetResultFromApi<SampleDto>(string.Format(client.BaseAddress));

最后将 myDto 转换为我想要的原始格式

var entity = ConvertGameDtoToEntity(gettingDto);

public SampleEntity ConvertGameDtoToEntity(SampleDto gettingDto)
{
        return new SampleEntity 
        {
            Id = gettingDto.Id,
            Name= gettingDto.Name,
            Address = gettingDto.Address,
        };
}

下面的链接带有清晰的描述 https://www.codeproject.com/Articles/36781/Serialization-and-Deserialization-in-ASP-NET-with

于 2016-12-31T06:31:20.823 回答