如何将可序列化的约束添加到.NET泛型类';类型参数?

如何将可序列化的约束添加到.NET泛型类';类型参数?,.net,generics,serialization,.net,Generics,Serialization,有没有办法声明泛型类的变量类型必须是可序列化的 向奥利弗·哈纳皮致意您可以检查界面,但不能检查属性: public void DoSomething<T>( T input ) where T:ISerializable { ... public void DoSomething(T输入),其中T:ISerializable{。。。 但是,只能在运行时检查属性,因此不能使用约束强制使用属性。一个选项是在方法的开头设置验证,并使用反射来检查序列化属性是否存在,但这只是执行时检查。你

有没有办法声明泛型类的变量类型必须是可序列化的


向奥利弗·哈纳皮致意您可以检查界面,但不能检查属性:

public void DoSomething<T>( T input ) where T:ISerializable { ...
public void DoSomething(T输入),其中T:ISerializable{。。。

但是,只能在运行时检查属性,因此不能使用约束强制使用属性。一个选项是在方法的开头设置验证,并使用反射来检查序列化属性是否存在,但这只是执行时检查。你破坏了提供编译的泛型的所有用途e时间类型安全。如果您对传递给方法的类型拥有绝对控制权,则可以设置单元测试以检查属性是否存在。这将是构建过程的一部分。

标记有属性的类不会实现(非常神奇)此接口,是吗?否-您可以使用[Serializable]标记类或者您可以让他们实现ISerializable接口。您只能对接口进行约束。ISerializable允许您覆盖默认的序列化过程,而[Serializable]属性仅允许CLR知道此类可以序列化。您只能在构造函数中引发运行时异常。