はい、オブジェクトの実際のタイプを知らなくてもデシリアライズすることは確かに可能です。実際、逆シリアル化するために型について何も知る必要はありません。バイナリの意味での逆シリアル化は、バイトの配列を元の型に変換し、参照をオブジェクトとして返すだけです。後で、これをインスタンスの任意の正当なタイプに自由にキャストできます。
たとえば、次のコードはストリームをオブジェクトに逆シリアル化し、参照をReportBaseタイプに変換します。
public static void Deserialize(Stream stream)
{
BinaryFormatter formatter = new BinaryFormatter();
object obj = formatter.Deserialize(stream);
ReportBase report= (ReportBase) obj;
}
私がそれが可能であると言ったことに注意してください。これが機能するためには、ストリームがReportBase派生クラスの有効なシリアル化されたインスタンスを指している必要があり、そのクラスはシリアル化のルールに準拠している必要があります。
意図されているがシリアル化できないクラスを作成するのは非常に簡単です:http://blogs.msdn.com/jaredpar/archive/2009/03/31/is-it-serializable.aspx