ASP.Net  »  Guide  »  Guida Silverlight 

Le richieste JSON



Modifichiamo l'esempio fatto nella lezione precedente, in modo da invocare il servizio con JSON, per analizzare le classi di Silverlight dedicate a questo formato.

In Silverlight, un generico oggetto JSON è rappresentato dalla classe astratta JsonValue, contenuto nel namespace System.Json dell'omonimo assembly. Questa classe espone il metodo Load che permette di deserializzare uno Stream JSON in un oggetto JsonValue, proprio ciò di cui abbiamo bisogno.

Iniziamo aggiungendo i parametri &format=json&nojsoncallback=1 all'URI di richiesta. In questo caso abbiamo bisogno di uno Stream, quindi modifichiamo il codice della ricerca impostando la callback per l'evento OpenReadAsyncCompleted e richiamiamo il metodo OpenReadAsync della classe WebClient.

private void btnSearch_Click(object sender, RoutedEventArgs e)
{
  var searchText = txtSearch.Text;
  string url = String.Format(baseUrl, searchText, apiKey);
  
  WebClient client = new WebClient();
  client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
  client.OpenReadAsync(new Uri(url));
}

Passiamo alla modifica del metodo di callback. Lasciamo intatta la gestione dell'errore, e deserializziamo lo Stream tramite il metodo Load della classe JsonValue.

private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
  if (e.Error != null) { MessageBox.Show(e.Error.Message); return; }
  
  JsonValue jsonPhotos = JsonValue.Load(e.Result);
  
  var flickrPhotos = from JsonObject photo in jsonPhotos["photos"]["photo"]
                     select new FlickrPhoto
                     {
                       Id = (string)photo["id"],
                       Owner = (string)photo["owner"],
                       Secret = (string)photo["secret"],
                       Server = (string)photo["server"],
                       Farm = (int)photo["farm"],
                       Title = (string)photo["title"]
                     };
  lstPhotos.ItemsSource = flickrPhotos.ToList();
}

JsonValue è una collezione dictionary di proprietà/valori, quindi per leggere il valore di una proprietà di un dato trasferito possiamo usare JsonValue come un dictionary.

Tramite LINQ to JSON iteriamo l'elenco delle foto contenute nella risposta e generiamo una lista di oggetti FlickrPhoto.

L'interfaccia utente non subirà alcuna modifica, quindi lanciando l'applicazione otteniamo un risultato analogo al precedente.

Ultimi articoli ASP.Net

LINQ e la trappola della 'deferred execution'

Una "trappola" in cui si può incappare utilizzando il risultato di...

C#, le Custom Type Conversion

Conversioni personalizzate tra classi, creare metodi particolari per...

Introduzione a Entity Framework

Il framework ORM messo a disposizione da .NET

Repeater: visualizzare un feed RSS

Utilizzare il controllo XMLDataSource e sfruttare il metodo XPath()...

Repeater, il server control "semplice"

Cos'è e come funziona il controllo Repeater

Altri articoli

Guide ASP.Net

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Guida Visual Studio 2010

L'ambiente di sviluppo di riferimento per sviluppare applicazioni su...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto