У меня есть довольно простой класс, который содержит несколько примитивных типов и некоторые коллекции, в основном с перечислениями.Теперь мне нужно сериализовать этот объект до минимально возможного размера, совместимого с UTF8.
Это класс, который мне нужен для сериализации
public class Context
{
public Hashtable UserModuleRoles { get; set; }
public Dictionary<string, object> CustomSettings { get; set; }
public int Uid { get; set; }
public int Id { get; set; }
public int ActiveId { get; set; }
public byte Default { get; set; }
public SetEnum Ident { get; set; }
public string Name { get; set; }
public sbyte State { get; set; }
public DateTime Date { get; set; }
}
.
Вот какЯ сериализую объект
public string Serialize(object serializeObject)
{
MemoryStream stream = new MemoryStream();
BinaryFormatter b = new BinaryFormatter();
b.Serialize(stream, serializeObject);
byte[] data = stream.ToArray();
stream.Dispose();
stream = new MemoryStream();
using (ZipFile zip = new ZipFile())
{
zip.AddEntry("data", data);
zip.Save(stream);
}
data = stream.ToArray();
stream.Dispose();
return Convert.ToBase64String(data);
}
В моей первой попытке я сериализую объект, заархивирую его содержимое (примерно на 1/3 меньше) и преобразую его в строку base64.Но у base64 довольно большие издержки, равные 1/3, и я знаю, что есть base128, но я не знаю, с чего начать, и мой поиск кодировки base128 был неудачным.
Редактировать:
Я протестировал класс ObjectStateFormatter со всем объектом "Context", что приводит к увеличению на 8 байт и более медленной сериализации / десериализации.Может быть, мне пришлось использовать его только для свойств, а не для всего класса?