Serializzare un oggetto con DataContractSerializer e salvare l'XML in LocalFolder con WinRT

di Alessio Leoncini, in WinRT,

Nello script 6 (https://www.winrtitalia.com/script/6/Accedere-Risorse-Immagini-Windows-Store-App-Windows.aspx) abbiamo visto che le Windows Store app hanno a disposizione tre tipologie di cartelle in cui memorizzare file e informazioni: LocalFolder, TemporaryFolder e RoamingFolder.

In WinRT leggere e scrivere file in queste cartelle può essere fatto attraverso Windows.Storage.ApplicationData.Current e una delle tre proprietà sopra citate, di tipo StorageFolder.

In tali cartelle, ad esempio, possiamo persistere lo stato di alcuni oggetti attraverso la serializzazione ed il loro salvataggio in file XML.

Con l'esempio seguente andiamo a serializzare e scrivere il file data.xml in LocalFolder.

string fileName = "data.xml";

var myObj = new MyObject()
{
  Id = 1,
  Name = "Name1",
  Description = "Description1"
};

StorageFolder localFolder = ApplicationData.Current.LocalFolder;

StorageFile localFile = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

IRandomAccessStream fileRandomAccess = await localFile.OpenAsync(FileAccessMode.ReadWrite);

IOutputStream fileOutputStream = fileRandomAccess.GetOutputStreamAt(0);

var fileSerializer = new DataContractSerializer(typeof(MyObject));

fileSerializer.WriteObject(fileOutputStream.AsStreamForWrite(), myObj);

await fileOutputStream.FlushAsync();

Nel codice seguente vediamo come leggere il file salvato e ricostruire l'oggetto descritto al suo interno.

string fileName = "data.xml";

StorageFolder localFolder = ApplicationData.Current.LocalFolder;

StorageFile localFile2 = await localFolder.GetFileAsync(fileName);

var fileSerializer = new DataContractSerializer(typeof(MyObject));

IInputStream fileInputStream = await localFile2.OpenReadAsync();

var obj = (MyObject)fileSerializer.ReadObject(fileInputStream.AsStreamForRead());

Se andiamo a controllare dove il file viene effettivamente salvato sul file system:

possiamo notare come questo sia contenuto in una cartella il cui nome corrisponde al package family name, verificabile nel file di manifest Package.appxmanifest.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi