我想知道是否有任何可以快速将我的班级转换为byte[]
的内容。例如,如果我有class Foo { public string name; public int age }
我不想使用反射,但仍然有一个没有手写的序列号。
我所知道的最接近的是dapper.net,它可以动态生成IL代码(在使用反射之后)并缓存IL / jit代码,因此它的速度非常快。如果我可以选择为字符串使用轻型/快速可选压缩器,但不是必需的,那将是很好的。我也许想把Foo[]
(或List<Foo>
)扔到这件事上。我有什么选择?
答案 0 :(得分:5)
大多数进行序列化的东西都会使用反射。这并不意味着它会很慢......通常会将初始调用的结果缓存到反射API。但是,如果(且仅当)实际性能测试显示BinaryFormatter对您不够好,您也可以尝试protobuf-net。
答案 1 :(得分:1)
您可以使用BinaryFormatter。只需序列化为MemoryStream然后获取字节。
你必须在课程上撒上[Serializable]
。
作为扩展,它看起来像:
public byte[] ToByteArray(this object o)
{
using (var s = new MemoryStream())
{
new BinaryFormatter().Serialize(s, o);
return s.ToArray();
}
}