2016-04-28 6 views
0

Ich habe Probleme, diese JSON-Datei zu deserialisieren. Ich möchte das "favoriteSongs" -Array an meine Ansicht in XAML binden und alle Informationen in einem LonglistSelector anzeigen.C# deserialize JSON-Array und Datenbindung

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

Meiner Ansicht nach Modell im ObservableCollection mit den Informationen aus dem json hinzufügen möchten, hier die „getFavoriteSongsModel“ ist mein RootObject

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

ich mit einem anderen ObservableCollection dieses Muster zu verwenden versucht, die Punkte eine Klasse mit einer Liste aller Informationen, die ich brauche, aber es stürzt jedes Mal ab. Ich weiß nicht, wie man die "Favoriten" Variable verwendet, ich weiß, dass es bevölkert ist, aber ich kann nicht anzeigen, was ich in der XAML will.

  <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> 

Antwort

0

Ich habe einen Beispielcode auf der Basis meines Verständnisses erstellen.

Ich habe drei Klassen basierend auf JSON-String von json2csharp erstellt, die sehr nützlich ist, um Klassen basierend auf JSON-String zu erstellen.

Drei Klassen sind als

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; } 
} 

ich folgende haben benutzen, um Ihre Zeichenfolge als json Gerechte und Basis habe ich diese samle erstellen.

folgende Code wird deserialisiert JSON-String

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; 

und in XAML Bindung ist, wie folgend

<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> 

Hoffnung, damit es für Sie hilfreich sein.