【问题标题】:How to display Json data in windows phone 7如何在 windows phone 7 中显示 Json 数据
【发布时间】:2013-09-13 08:18:18
【问题描述】:

我是 windows phone 的初学者, 而且我不知道如何从 JSON 字符串中填充列表框。 在我的应用程序中,会有一个来自网络服务的 Json 字符串。

所以,这是我的 json String [json Array]:

{
"type":"ok",
"result":
       {
       "Country":[{
                    "title":"Country-1",
                    "description":"US",
                    "status":"1"
                  },
                  {
                    "title":"Country-2",
                    "description":"Australia",
                    "status":"0"
                   },
                   {
                    "title":"Country-3",
                    "description":"Brazil,
                    "status":"0"
                  }      
                 ]
        }
}

我想在我的应用程序的列表框中绑定它。 我真的不知道, 如何在列表框中绑定。

请给我完整的 xaml 和 c# 代码。

【问题讨论】:

    标签: c# asp.net json xaml windows-phone-7


    【解决方案1】:

    首先,你需要一个好的库来帮助你转换你的 json 将字符串转换为您的 c# 模型表示(反序列化)。

    您可以编写自己的,使用内置的平台反序列化器或只使用 NewtonSoft.json

    要为 WP 安装 NewtonSoft,请使用 Nuget。请注意,您必须使用 5.0.8 版本,因为 6.x 系列不支持 Windows Phone 7。

    我已经稍微简化了你的 json 字符串,不明白为什么一个 country 属性会保存一个国家列表?

    c#,在你的代码后面

    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
    
            //BindCountries();
        }
    
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            BindCountries();
        }
    
        private void BindCountries()
        {
            var json =
                "{\"type\":\"ok\",\"countries\":[{\"title\":\"Country-1\",\"description\":\"US\",\"status\":\"1\"},{\"title\":\"Country-2\",\"description\":\"Australia\",\"status\":\"0\"},{\"title\":\"Country-3\",\"description\":\"Brazil\",\"status\":\"0\"}]}";
    
            var countryResult = JsonConvert.DeserializeObject<CountryResult>(json);
    
            if (countryResult.Type.Equals("ok", StringComparison.InvariantCultureIgnoreCase))
            {
                lstCountries.ItemsSource = countryResult.Countries;
            }
    
        }
    }
    
    public class CountryResult
    {
        public string Type { get; set; }
        public IEnumerable<Country> Countries { get; set; }
    }
    
    public class Country
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public int Status { get; set; }
    }
    

    Xaml:

    <phone:PhoneApplicationPage 
    x:Class="PhoneApp1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">
    
    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
    
        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>
    
        <!--ContentPanel - place additional content here-->
        <Grid  x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ListBox x:Name="lstCountries">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock FontSize="{StaticResource PhoneFontSizeExtraLarge}" Text="{Binding Title}" />
                            <TextBlock Text="{Binding Description}" />
                        </StackPanel>
    
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    
        </Grid>
    </Grid>
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多