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 属性的基类来间接做到这一点,并向您的泛型类添加一个约束,以便类型参数应该从该基类继承:

[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 回答