2

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

我所知道的最接近的是 dapper.net,它动态生成 IL 代码(在使用反射之后)并缓存 IL/jit 代码,因此它几乎可以全速运行。如果我可以选择对字符串使用轻/快速的可选压缩器但不是必需的,那就太好了。我可能还想扔Foo[](或List<Foo>)这件事。我有哪些选择?

4

2 回答 2

5

大多数进行序列化的东西都将使用反射。这并不意味着它会很慢......通常它会缓存对反射 API 的初始调用的结果。但是,如果(且仅当)实际性能测试表明 BinaryFormatter 对您来说不够好,您也可以尝试protobuf-net

于 2013-02-06T02:52:32.873 回答
1

您可以使用BinaryFormatter。只需序列化为 MemoryStream ,然后获取字节。

你将不得不洒[Serializable]在课堂上。

作为扩展,它看起来像:

public byte[] ToByteArray(this object o)
{
    using (var s = new MemoryStream())
    {
       new BinaryFormatter().Serialize(s, o);
       return s.ToArray();
    }
}
于 2013-02-06T02:49:15.687 回答