是否可以创建T
类型的通用方法,其中T
具有特定属性?
E.g:
public static XmlDocument SerializeObjectToXml<T>(T obj)
{
//...
}
我想仅序列化具有Serializable
和/或DataContract
属性的类:
[Serializable]
[DataContract(Name = "viewModel", Namespace = "ns")]
internal class ViewModel
{
//...
}
答案 0 :(得分:9)
我害怕不。有三种类型的约束:派生,构造函数和引用/值类型。
我相信,您应该检查方法体中的属性,如果可序列化对象不符合条件,则调用另一种方法来处理它。
答案 1 :(得分:5)
也许你可以通过创建一个具有Serializable属性的基类来间接地做到这一点,并为你的泛型类添加一个约束,以便type-parameter应该从该基类继承:
[Serializable]
public class MyBase {}
public static XmlDocument SerializeToXml<T>( T obj ) where T : MyBase {}
答案 2 :(得分: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