在C#中对象 - > Bin?

时间:2013-02-06 02:43:55

标签: .net

我想知道是否有任何可以快速将我的班级转换为byte[]的内容。例如,如果我有class Foo { public string name; public int age }我不想使用反射,但仍然有一个没有手写的序列号。

我所知道的最接近的是dapper.net,它可以动态生成IL代码(在使用反射之后)并缓存IL / jit代码,因此它的速度非常快。如果我可以选择为字符串使用轻型/快速可选压缩器,但不是必需的,那将是很好的。我也许想把Foo[](或List<Foo>)扔到这件事上。我有什么选择?

2 个答案:

答案 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();
    }
}