using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; namespace StgSharp.Data { /// /// A class contains a sets of methods to serialize several types /// public static partial class Serializer { /**/ public static byte[] Serialize(Dictionary table) { using (var stream = new MemoryStream()) { foreach (var pair in table) { stream.WriteByte(pair.Key); byte[] keyCode = Serialize( pair.Value); stream.WriteByte((byte)keyCode.Length); stream.Write(keyCode, 0, keyCode.Length); } return stream.ToArray(); } } /**/ public static void Deserialize(byte[] data, out Dictionary dict) { dict = new Dictionary(); int stat = 0; byte key = 0; byte[] raw = new byte[0]; foreach (var b in data) { switch (stat) { case 0: //getting key if (raw.Length != 0) { BitArray bits; Deserialize(raw, out bits); dict.Add(key, bits); } key = b; stat -= 1; break; case -1: //getting length raw = new byte[b]; stat = b; break; default: raw[raw.Length - stat] = b; stat--; break; } } } } }