1

型にデシリアライズしたいのですが、その型の文字列表現しかありません。

私が知っているのは、型が implements であることだけISomethingです。

string typeName = "MyClass";

BinaryFormatter binaryFormatter = new BinaryFormatter();
byte[] data = Convert.FromBase64String(serialisedString);

using (MemoryStream memoryStream = new MemoryStream(data, 0, data.Length))
{
    return (ISomething)binaryFormatter.Deserialize(memoryStream) as ISomething;
}

しかし、BinaryFormatter.Deserialize で次の例外が発生します。

タイプ 'System.RuntimeType' のオブジェクトをタイプ 'MyAssembly.ISomething' にキャストできません

に格納されているクラス名にキャストするにはどうすればよいtypeNameですか?

4

2 に答える 2

0

最も重要なのは、その結果で何をしたいのかということだと思います。

つまり、Sam のコードを使用しても、結果はオブジェクト型の変数に渡されます。これには var を使用できません。したがって、単純なデシリアライズまたはサムのデシリアライズを使用すると、同じ結果が得られます。

私の質問は、結果をどうしたいですか?

いくつかの一般的なメソッドを呼び出したいですか? ISomething は共通のインターフェイスですか?

それが事実であり、事前に知っている場合は、すべての型を ISomething などから継承し、それにキャストします。そうでなければ、あなたが tre result で何をするか想像できません。

私が考えることができる唯一の使用法(共通インターフェースなし)は、タイプごとにケースを使用し、特定のケースごとに異なる考えをすることですか??? しかし、その場合...シリアル化されたオブジェクトのタイプがわかります。

于 2013-10-04T12:21:49.063 に答える