2016-04-07 19 views
0

型キャストに使用する完全なクラス名があります。 私は逆シリアル化した後、私はすなわち型名特定の型に型キャストしなければならないオブジェクトを取得しています型の文字列を使用した型キャスト

someType=Type.GetType("TypeName"). 

使用して型を取得することができます。

私は

obj = (someType) SXmlSerializer.Deserialize("TypeName", someData); 

を試してみましたが、それはない作品を行います。 クラス名だけを文字列として使用して型キャストを実行するオプションはありますか?

プロパティの値を変更する必要があるため、という値をに変更する必要がありますので、someTypeに変換する必要があります。

+1

コンパイル時に逆シリアル化されるオブジェクトの型がわかっている場合は、この型にキャストして反映させないでください。 –

+0

申し訳ありませんが、コンパイル時にオブジェクトの型を知りません。約30-35種類の型がある可能性があります。 –

+3

型を指定できないため、実際には何も求めていません実行時に 'obj' ...情報を*なぜ*あなたがそのようなコードが必要だと思いますか? –

答えて

2

プロパティの値、つまりobj.SomeProperty = "AnotherValue"を変更する必要があるため、someTypeに変換する必要があります。

コンパイル時に型が分からない場合は、SomePropertyというプロパティはどのようになっているのですか?

あなたがしたい場合はそれがないことをを想定して、あなたがdynamicを使用することができランタイムために型チェックを延期:

dynamic obj = SXmlSerializer.Deserialize("TypeName", someData); 

、あなたは実行時に失敗します

obj.SomeProperty = "AnotherValue"; 

を行うことができますオブジェクトにSomePropertyプロパティがない場合

キャスティングは、コンパイル時にメソッドがどのようにバインドされるかにのみ影響します。コンパイル時に型が分からなければ、キャストには価値がありません。

関連する問題