类型为T的通用,其中T具有特定属性

lku*_*ylo 7 c# generics attributes serializable

是否有可能创建类型的一般方法T,其中T具有特定属性?

例如:

public static XmlDocument SerializeObjectToXml<T>(T obj)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

我想只序列化一个带有Serializable和/或DataContract属性的类:

[Serializable]
[DataContract(Name = "viewModel", Namespace = "ns")]
internal class ViewModel
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

Iva*_*tin 9

我不敢.有三种类型的约束:派生,构造函数和引用/值类型.

我相信,您应该检查方法体中的属性,如果可序列化对象不符合条件,则调用另一种方法来处理它.


Fre*_*els 5

也许您可以通过创建具有Seri​​alizable属性的基类来间接地执行此操作,并向您的泛型类添加约束,以便type-parameter应该从该基类继承:

[Serializable]
public class MyBase {}

public static XmlDocument SerializeToXml<T>( T obj ) where T : MyBase {}
Run Code Online (Sandbox Code Playgroud)