2016-04-28 14 views
0

このjsonファイルを逆シリアル化するのに問題があります。 "favoriteSongs"配列をxamlのビューにバインドして、すべての情報をlonglistselectorに表示したい。 JSONからの情報を追加するためのObservableCollectionを使用して、私のビューモデルイムでc#json配列とデータバインディングをデシリアライズ

{ 
    "_id": "56fd864ff28510694a6a7b5e", 
    "addFavorites": { 
      "favoriteSongs": [ 
        { 
          "_id": "570aeb89869a0520e0d0365c", 
          "title": "get lucky", 
          "album": "random access memory", 
          "primaryArtist": "daft punk", 
          "artist": "570ae933cd7d1072b430ea51", 
          "primaryGenre": "electro", 
          "genre": "570ae933cd7d1072b430ea52", 
          "duration": "3m31s", 
          "year": 2013 
        }, 
        { ... } 
      ] 
} 

、ここでの「getFavoriteSongsModelは」私が指す別のObservableCollectionでこのパターンを使用しようとした

for (int i = 0; i < count; i++) 
     { 
      getFavoriteSongsModel = JsonConvert.DeserializeObject<GetFavoriteSongsModel>(e.Result); 
      getFavoriteSongs.Add(new GetFavoriteSongsModel() 
      { 
       Id = getFavoriteSongsModel.Id, 
       Favorites = getFavoriteSongsModel.Favorites 
      }); 

私RootObjectです私が必要とするすべての情報のリストを持つクラスですが、毎回クラッシュします。私はどのように "お気に入り"変数を使用するかわからない、私はそれが人口がわかっているが、私はxamlで何を表示することはできません。

  <Grid> 
       <phone:LongListSelector x:Name="MainLongListSelector" Margin="0,0,-12,0" ItemsSource="{Binding getFavoriteSongs}"> 
        <phone:LongListSelector.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Margin="0,0,0,17" > 
           <TextBlock Text="{Binding FavoriteSongs.Album}" Style="{StaticResource PhoneTextBlockBase}"/> 
           <TextBlock Text="{Binding FavoriteSongs.Title}" Style="{StaticResource PhoneTextBlockBase}"/> 
          </StackPanel> 
         </DataTemplate> 
        </phone:LongListSelector.ItemTemplate> 
       </phone:LongListSelector> 
      </Grid> 

答えて

0

私は理解の基礎にサンプルコードを作成しました。

私は、Jsonストリングに基づいて、json2csharpから3つのクラスを作成しました。これは、Jsonストリングに基づいてクラスを作成するのに非常に便利です。

public class FavoriteSong 
{ 
    public string _id { get; set; } 
    public string title { get; set; } 
    public string album { get; set; } 
    public string primaryArtist { get; set; } 
    public string artist { get; set; } 
    public string primaryGenre { get; set; } 
    public string genre { get; set; } 
    public string duration { get; set; } 
    public int year { get; set; } 
} 

public class AddFavorites 
{ 
    public ObservableCollection<FavoriteSong> favoriteSongs { get; set; } 
} 

public class MainClass 
{ 
    public string _id { get; set; } 
    public AddFavorites addFavorites { get; set; } 
} 

は、私はちょうどJSONとしてあなたの文字列を使用している以下のよう

3つのクラスがあり、ベースの上に、私はこのsamleを作成しています。

次のコードは、JSON文字列に

public MainClass objMainClass { get; set; } 
    string strJson = "{\"_id\": \"56fd864ff28510694a6a7b5e\",\"addFavorites\": {\"favoriteSongs\": [{\"_id\": \"570aeb89869a0520e0d0365c\",\"title\": \"get lucky\",\"album\": \"random access memory\",\"primaryArtist\": \"daft punk\",\"artist\": \"570ae933cd7d1072b430ea51\",\"primaryGenre\": \"electro\",\"genre\": \"570ae933cd7d1072b430ea52\",\"duration\": \"3m31s\",\"year\": 2013}]}}"; 

     objMainClass = new MainClass(); 
     objMainClass = JsonConvert.DeserializeObject<MainClass>(strJson); 

     MainLongListSelector.DataContext = objMainClass.addFavorites; 

をデシリアライズし、XAMLで結合することは、あなたに参考になりますので

<phone:LongListSelector 
     x:Name="MainLongListSelector" 
     Margin="0,0,-12,0" 
     ItemsSource="{Binding favoriteSongs}"> 
     <phone:LongListSelector.ItemTemplate> 
      <DataTemplate> 
       <StackPanel 
        Margin="0,0,0,17"> 
        <TextBlock 
         Text="{Binding album}" 
         Style="{StaticResource PhoneTextBlockBase}" /> 
        <TextBlock 
         Text="{Binding title}" 
         Style="{StaticResource PhoneTextBlockBase}" /> 
       </StackPanel> 
      </DataTemplate> 
     </phone:LongListSelector.ItemTemplate> 
    </phone:LongListSelector> 

希望を次のようになります。

関連する問題