- Learn
- Guida Silverlight
- Le richieste JSON
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.
Se vuoi aggiornamenti su Le richieste JSON inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.