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 に答える