10

特定の属性を持つタイプTのジェネリックメソッドを作成することは可能ですか?T

例えば:

public static XmlDocument SerializeObjectToXml<T>(T obj)
{
    //...
}

Serializableおよび/またはDataContract属性を持つクラスのみをシリアル化したい:

[Serializable]
[DataContract(Name = "viewModel", Namespace = "ns")]
internal class ViewModel
{
    //...
}
4

3 に答える 3

11

いいえ、恐れ入ります。制約には、派生、コンストラクタ、参照/値型の3つのタイプがあります。

メソッド本体の属性を確認し、シリアル化可能なオブジェクトが基準を満たしていない場合は、別のメソッドを呼び出して処理する必要があると思います。

于 2012-07-04T07:58:45.320 に答える
6

おそらく、Serializable属性を持つ基本クラスを作成し、ジェネリッククラスに制約を追加して、type-parameterがその基本クラスから継承するようにすることで、間接的に行うことができます。

[Serializable]
public class MyBase {}

public static XmlDocument SerializeToXml<T>( T obj ) where T : MyBase {}
于 2012-07-04T08:05:04.557 に答える
1

静的に、私はそうは思いません。ただし、実行時にタイプTを確認できます。

var isDataContract = typeof(T).GetCustomAttributes(typeof(DataContractAttribute), true).Any();
if (!isDataContract) throw new InvalidOperationException("You can only serialize classes that are marked as data contracts.");
//... continue serialization
于 2012-07-05T15:59:59.607 に答える