1

http://json2csharp.comを使用して、以下の JSON 文字列から C# クラスを生成しました。

{
    "stationArr":[
        {
            "id":"9",
            "name":"name9",
        "sidebar":{
                "original":"http://myurl.com/station_images/5/5_s.png",
                "m":"http://myurl.com/station_images/5/m/5_s_m.png",
                "s":"http://myurl.com/station_images/5/s/5_s_s.png"
            }
        },
    {
            "id":"3",
            "name":"name3",
        "sidebar":{
                "original":"http://myurl.com/station_images/5/5_s.png",
                "m":"http://myurl.com/station_images/5/m/5_s_m.png",
                "s":"http://myurl.com/station_images/5/s/5_s_s.png"
            }
    ]
    "stationUrlMap":{
        "9":"http://myurl.com/9_64",
        "3":"http://myurl.com/3_64",
    }
}

生成されたクラスは (クラスごとに異なる .cs を作成しました。

public class Sidebar
{
    public string original { get; set; }
    public string m { get; set; }
    public string s { get; set; }
}

public class StationArr
{
    public string id { get; set; }
    public string name { get; set; }
    public Sidebar sidebar { get; set; }
}

/*public class StationUrlMap
{
    public string __invalid_name__9 { get; set; }
    public string __invalid_name__3 { get; set; }
}
*/
public class StationList
{
    public List<StationArr> stationArr { get; set; }
//    public StationUrlMap stationUrlMap { get; set; } Dicarded it
}

StationUrlMap は必要ないので破棄しました。

次のコードを使用してオブジェクトを作成しています

string resultString = sd.ReadToEnd();
StationList stations = JsonConvert.DeserializeObject<StationList>(resultString);
Debug.Writeline(stations.stationArr.Count); // gives Output 9 Which is correct.

UI にステーションのリストを表示する方法がわかりません (ListBox を使用)。私を正しい方向に導いてください。

4

2 に答える 2

1

XAML で ListBox を作成する

<ListBox x:Name="ListBoxStations" Height="500" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Width="450">
                 <Image Source="{Binding Path=sidebar.original}"/>
                 <TextBlock Text="{Binding Path=name}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

そしてcsファイルで、json変換後に次のことを行います

StationList stations = JsonConvert.DeserializeObject<StationList>(resultString);
ListBoxStations.ItemsSource = stations.stationArr;

上記の XAML コードは単なるサンプルであり、要件に応じて変更してください。

于 2012-09-30T11:53:02.077 に答える
0

2 つの方法があります。

最初に、リストボックスのItemSourceプロパティを作成したばかりのリストに設定できます。

次に、リスト内にObservableCollectionを作成し、監視可能なコレクションをリストボックスの ItemSource プロパティにバインドできます。Observable Collection にアイテムを追加すると、リストボックスに表示されます。

2 番目の方法では、リスボックス内の項目をより詳細に制御できます。監視可能なコレクションの要素を削除または追加でき、リストボックスの内容に反映されます。最初の方法では、リストの内容が読み取り専用になり、項目を追加または削除できなくなります。

http://msdn.microsoft.com/en-us/library/ms668604.aspx

http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox%28v=vs.95%29.aspx

于 2012-09-30T11:40:13.720 に答える