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