2012-02-14 11 views
3

明示的にSerializable属性が定義されているすべての拡張クラス型を取得できますか?それはBaseClassのを拡張し、明示的に属性シリアライズが含まれていませんDoNotWantながらSerializableの属性を持っているようリフレクションを使用してSerializableattriubteですべての拡張型を取得

[DataContract] 
[KnownType("GetKnownTypes"); 
public abstract class BaseClass 
{ 
    public Type[] GetKnownTypes(){ 
     return all classes which extend this class 
     AND explicitly have the [Serializable] attribute 
    } 
} 

public class DoNotWant : BaseClass {} 

[Serializable] 
public class Want : BaseClass {} 

のでGetKnownTypesは、明示的に

はありがとう、クラスの欲しい」を返します

編集:: 私はIsSerializableが常に真実であると思われるので、IsSerializableが正確であるとは思わない(BaseClassがSerializableであるかどうかわからない)

+0

WCF/DataContractが** [** Serializable]について気にしないので、シナリオが混乱しています。私たちはそれを見ることは期待しません。また、コンパイラの詳細[Serializable]は、IsSerializableの基底となる同じCLIフラグにマップされます(実際には属性として実装されていません...いいえ:実際はそのことを意味します)。ただし、継承によって異なることがあります。しかし、すべての型が同じアセンブリ内にある場合は、それは十分に簡単でなければなりません。 –

答えて

4

未テストだが、

+0

Odd。私のコードはこれとほぼ同じですが、動作しませんでした。私は今、両者の違いを見つけようとします。ありがとうございました。 – AlanFoster

関連する問題