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.
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 ---");
    }
  }
}
Interessante anche l'oggetto XmlWriterSettings che permette di controllare come verra scritto e formattato il file xml.