Serializzare un oggetto in XML su un file compresso in GZIP
In questo esempio in C# si vede come serializzare un oggetto (contents) in XML su un file tramite uno stream compresso in GZIP.
Come contenuto del file di esempio uso i nomi delle culture ricavate tramite il metodo CultureInfo.GetCultures(CultureTypes.AllCultures).
Per gestire la compressione uso l'oggetto GZipStream passando lo stream del file e il parametro CompressionMode.Compress per comprimere o CompressionMode.Decompress per decomprimere.
Idem per serializzare uso sempre XmlSerializer ed invoco il metodo Serialize per serializzare e Deserialize per deserializzare l'oggetto.
Interessante anche l'oggetto XmlWriterSettings che permette di controllare come verrà scritto e formattato il file XML .
Come contenuto del file di esempio uso i nomi delle culture ricavate tramite il metodo CultureInfo.GetCultures(CultureTypes.AllCultures).
Per gestire la compressione uso l'oggetto GZipStream passando lo stream del file e il parametro CompressionMode.Compress per comprimere o CompressionMode.Decompress per decomprimere.
Idem per serializzare uso sempre XmlSerializer ed invoco il metodo Serialize per serializzare e Deserialize per deserializzare l'oggetto.
C#
using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Xml;
using System.Xml.Serialization;
namespace Sgart
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("--- BEGIN ---");
string path = Path.Combine(Environment.CurrentDirectory
, "exampleCompressedFile.xml.gzip");
//data for example
Console.WriteLine("Preparo i dati");
List<string> contents = new List<string>();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
contents.Add(ci.DisplayName);
}
//save compressed file
Console.WriteLine("Salvo il file xml compresso");
using (FileStream fs = File.Create(path))
{
//stream for compression
using (GZipStream gz = new GZipStream(fs
, CompressionMode.Compress))
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.UTF8;
XmlWriter writer = XmlWriter.Create(gz, settings);
//cast for serialization
XmlSerializer srlz = new XmlSerializer(typeof(List<string>));
srlz.Serialize(writer, contents);
writer.Close();
}
}
//load compressed file
Console.WriteLine("Carico il file xml compresso in un altro oggetto");
List<string> newContents = null;
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read))
{
//stream for decompression
using (GZipStream gz = new GZipStream(fs
, CompressionMode.Decompress))
{
XmlReaderSettings settings = new XmlReaderSettings();
XmlReader reader = XmlReader.Create(gz, settings);
//cast for deserialization
XmlSerializer srlz = new XmlSerializer(typeof(List<string>));
newContents = (List<string>)srlz.Deserialize(reader);
reader.Close();
}
}
//print read value
Console.WriteLine("Stampo i valori letti...");
foreach (string s in newContents)
{
Console.WriteLine(s);
}
Console.WriteLine("--- END ---");
}
}
}