我正在编写一个Generic类,它尝试将Type T的对象序列化为XML。不幸的是(我确定你知道)并非所有对象都可以成功地序列化为XML,因此我希望能够编写一个约束来指定T只能是一个XML Serializable类。这有可能吗?
非常肯定这个问题的答案是“不”,但想想无论如何我都会问,以防我错过了什么。
答案 0 :(得分:5)
唯一可用的限制是:
class
/ struct
new()
BaseType
/ Interface
其中,只有2个略微有趣的是:new()
(因为XmlSerializer
需要公共无参数构造函数)和:Interface
(因为{{1} }}是其中一个选项);但是:
IXmlSerializable
不是必需,因此不适用所以简而言之:不,这不是你可以通过通用约束强制执行的东西
答案 1 :(得分:4)
你是对的,答案是否定的,你不能将泛型类型限制为XML可序列化。
原因在于,XML Serializer有一些关于它将序列化的非常具体的规则(最值得注意的是,它仅序列化公共属性,并且只有具有公共无参数构造函数的类型)。使XML类可序列化的因素无法用类型表示,因此无法为其制定通用约束。
您可以约束到接口,因此可能的解决方案是在XML可序列化的类型上使用标记接口。然后,如果您不控制要序列化的类型,则不起作用。