Nelle applicazioni Windows Phone, la serializzazione assume rilevanza per via della necessità di salvare lo stato dell’applicazione e delle singole pagine, visto che ogni tre per due l’App può essere interrotta, ripresa, tombstonizzata e via dicendo.
Disclaimer: In questo post non tratterò il ciclo di vita dell’App e/o le strategie di dove e quando serializzare e deserializzare, quanto piuttosto la serializzazione in se.
Iniziamo dalle basi: la serializzazione è quel processo che consente di rappresentare con dei dati “uno appresso all’altro” lo stato di un grafo di oggetti, per salvarlo da qualche parte o trasmetterlo a qualcuno. Per restare coi piedi per terra, facciamo subito un esempio. Prendiamo il seguente diagramma di classi:
e ipotizziamo che in un dato momento nella nostra applicazione si abbiano in memoria le seguenti istanze:
Abbiamo un grafo di oggetti (molto semplice) con una radice e tre foglie. E’ ovvio che in un caso reale il grafo può essere molto complesso, anche con riferimenti circolari. Ma rimanendo al nostro esempio, un possibile modo di rappresentare tale grafo, utilizzando la sintassi JSON, è il seguente:
{“Messaggio”:”Hello!”,“Destinatari”:[{“Nome”:“Mario”,“Cognome”:“Rossi”},{“Nome”:“Franco”,“Cognome”:“Verdi”},{“Nome”:“Carlo”,“Cognome”:“Bianchi”}]}
Senza entrare nel dettaglio di come funziona JSON, l’importante qui è “toccare con mano” quello che è stato fatto, ovvero tradurre un grafo di oggetti in una sequenza di simboli ordinata, nel caso specifico una stringa di testo. Tale stringa può essere a sua volta codificata (http encoded) in modo tale da poter essere trasferita tramite http, o direttamente salvata su un file o l’Isolated Storage di Windows Phone.
Ovviamente vi sono molti modi di serializzare un grafo, tra i quali i più noti (e implementati in vario modo nel Framework .NET) sono:
- Serializzazione binaria
- Serializzazione XML
- Serializzazione JSON
A tal riguardo, segnalo due ottimi post che a mio avviso vanno assolutamente letti, sia perché entrano in maggior dettaglio su quanto sopra accennato, sia perché sono davvero importanti per poter ottimizzare i tempi di risposta delle nostre applicazioni Windows Phone:
1. http://www.identitymine.com/forward/2010/11/loading-quickly-on-windows-phone-7-twitter-example/
2. http://blogs.claritycon.com/kevinmarshall/2010/11/03/wp7-serialization-comparison/