2016-04-28 1 views
0

У меня есть проблема десериализации этого json-файла. Я хочу привязать массив «favoriteSongs» к моему представлению в xaml и отобразить всю информацию в longlistselector.C# deserialize json array и привязка данных

{ 
    "_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 
        }, 
        { ... } 
      ] 
} 

На мой взгляд, модель им с помощью ObservableCollection, чтобы добавить информацию из JSON, здесь «getFavoriteSongsModel» мой RootObject

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

Я пытался использовать эту модель с другим ObservableCollection, что указывает на класс со списком всех данных, которые мне нужны, но каждый раз он падает. Я не знаю, как использовать переменную «Избранное», я знаю, что она заполнена, но я не могу показать, что я хочу в 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, что очень полезно для создания классов на основе строки 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 и на базе меня создать этот выборочными.

После код десериализации 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> 

Надежда, так что будет полезно для вас.