【发布时间】:2011-04-27 09:23:47
【问题描述】:
我有一个非常简单的类,它包含一些原始类型和一些主要是枚举的集合。现在我需要将此对象序列化为与 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 编码不成功。
或者有没有其他方法可以做到这一点?
如果不是最好的方法是
这是base128?
编辑:
我用整个“上下文”对象测试了 ObjectStateFormatter 类,这导致了 8 字节更多和更慢的序列化/反序列化。也许我必须只在属性而不是整个类上使用它?
【问题讨论】:
-
“UTF-8 兼容”是什么意思?
-
结果将存储在 cookie 中,据我所知 UTF-8 是这里的标准
标签: c# serialization utf-8