/// <summary> /// Sets attributes and encoded base64 data, compressed if needed. /// </summary> /// <param name="xml">The Binary node to populate with attributes and a value.</param> /// <param name="rng">Not used.</param> /// <param name="parameters">Parameters for serialization.</param> public override void PopulateChildren(XElement xml, IRandomNumberGenerator rng, KdbxSerializationParameters parameters) { xml.Add(new XAttribute("ID", Id)); byte[] data = BinaryData.GetClearData(); if (ShouldCompress(parameters)) { xml.Add(new XAttribute("Compressed", ToKeePassBool(true))); // Compress data if needed if (data.Length > 0) { using (MemoryStream memStream = new MemoryStream()) { using (Stream gzipStream = new GZipStream(memStream, CompressionMode.Compress)) { gzipStream.Write(data, 0, data.Length); } memStream.Flush(); data = memStream.ToArray(); } } } string encoded = CryptographicBuffer.EncodeToBase64String(data.AsBuffer()); xml.SetValue(encoded); }