使用Webservice的响应来创建xaml列表

时间:2014-08-27 20:18:43

标签: c# xaml windows-phone-8

我正在尝试使用从Web服务接收(成功)的响应,并使用它在xaml端“创建”或“填充”列表...

这是json

{  
   "success":true,
   "code":200,
   "rows":[  
      {  
         "Purchase":{  
            "id":"1"
         },
         "Who":{  
            "id":"1",
            "value":"NA"
         },
         "What":{  
            "id":"1",
            "value":"what-text"
         }
      },
      {  
         "Purchase":{  
            "id":"2"
         },
         "Who":{  
            "id":"2",
            "value":"ME"
         },
         "What":{  
            "id":"1",
            "value":"what-text"
         }
      }
   ]
}

我从我的CS那里得到了Web服务..

HttpWebRequest hwr = rez.AsyncState as HttpWebRequest;
HttpWebResponse response = hwr.EndGetResponse(rez) as HttpWebResponse;
string jsonResponseString = (new StreamReader(response.GetResponseStream(), Encoding.UTF8)).ReadToEnd();

Dispatcher.BeginInvoke(() =>
{
    var responseObject =
        Newtonsoft.Json.JsonConvert.DeserializeObject(jsonResponseString);
});

哪个有效。 “jsonResponseString”返回上面显示的json。

现在我想在我的xaml页面上显示这些结果。在这里,我已经有了最好用的问题..一个LongListSelector?或桌子应该工作吗?

在我的CS中我也设置了:

public class Purchase
{
    public List<string> Who { get; set; }
    public List<string> What { get; set; }
}

public class RootObject
{
    public List<Purchase> purchase { get; set; }
    public int success { get; set; }
    public string message { get; set; }
} 

我找到了可以使用它的地方,但可能不需要。

好吧无论如何我想知道在我的xaml视图中最好用什么以及我如何使用json返回的字符串或对象将数据填充到该视图中?

谢谢!

1 个答案:

答案 0 :(得分:3)

您的类应该像这样设置以匹配JSON结构:

public class Item
{ 
    public int id { get; set; }
    public string value { get; set; }
}

public class Row
{
    public Item Purchase { get; set; }
    public Item Who { get; set; }
    public Item What { get; set; }
}

public class RootObject
{
    public List<Row> rows { get; set; }
    public bool success { get; set; }
    public int code { get; set; }
} 

然后你可以反序列化你输入的“RootObject”:

RootObject responseObject = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(jsonResponseString);

至于演示文稿,您可以使用任意数量的控件:

  • ListBox允许用户选择
  • LongListSelector与ListBox类似,但适用于大型集合
  • 如果您只想展示收藏品,
  • ItemsControl非常有用

假设您使用ListBox - 那么只需将其ItemsSource设置为等于“responseObject.rows”,指定ItemTemplate即可。例如,这将显示“Who”和“What”作为列:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding Who.value}" />
                <TextBlock Grid.Column="1" Text="{Binding What.value}" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalAlignment" Value="Stretch" />
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>