2011-10-04 14 views
5

可能性の重複:
Serializable InheritanceC#シリアル化/継承

シリアライズ継承可能ですか?

例:

[Serializable] 
class A 
{ 
} 

class B : A 
{ 
} 

私はクラスBのインスタンスをデシリアライズ/シリアライズしようとした場合、私はクラスをシリアル化可能としてマークされていないことを示す例外を取得します。したがって、疑問:直列化は継承可能ですか?どうやってそれを行うのか分からないのですか、あるいは直列化する必要があるすべてのクラスに、明示的にそのようにマークする必要がありますか?

答えて

11

それはnot inheritableです:

Serializableの属性を継承することができないことに注意することが重要です。 MyObjectから新しいクラスを派生させた場合、その新しいクラスにも属性が設定されている必要があります。

あなたはそれをシリアル化可能にするだけでなくサブクラスをマークする必要があります。

[Serializable] 
class B : A { } 
+2

マイナー注意を。 *このケースでは*、この属性の 'Inherited'プロパティは直接関係しません(正しいことはありますが)。これは、メタデータ層では、[Serializable]が属性として実装されているのではなく、CLIクラスフラグとして実装されているためです(これはILストリームで確認できます)。 –

+1

Marcさんに感謝します。それは確かにマイナーなことではありません! –

+0

@Marc Gravell:テキストを変更し、そのプロパティ参照を削除しました...ありがとう –