泛型类约束——我可以指定泛型类型可以序列化为XML吗?
本文关键字:序列化 XML 泛型类型 我可以 约束 泛型类 | 更新日期: 2023-09-27 18:11:50
我正在编写一个泛型类,它试图将T类型的对象序列化为XML。不幸的是(我确信您知道),并非所有对象都可以成功地序列化为XML,因此我希望能够编写一个约束,指定T只能是XML可序列化的类。这有可能吗?
很确定这个问题的答案是"没有",但我想我还是会问,以防有什么我错过了。
唯一可用的约束是:
-
class
/struct
-
new()
-
BaseType
/Interface
:new()
(因为XmlSerializer
需要一个公共无参数构造函数)和:Interface
(因为IXmlSerializable
是选项之一);然而:-
IXmlSerializable
不需要,所以不适用 - no约束强制类型为public类型(在嵌套类型的情况下,是public类型的public类型)
- 它没有考虑到泛型限制
所以简而言之:不,这不是你可以通过通用约束来强制执行的
您是对的,答案是否定的,您不能将泛型类型约束为可XML序列化的。
这样做的原因是,XML序列化器对于序列化的内容有一些非常具体的规则(最值得注意的是,它只序列化公共属性,并且只序列化具有公共无参数构造函数的类型)。使类可XML序列化的因素不能用类型来表示,因此没有办法为它制定通用约束。
可以约束到一个接口,因此解决方案可能是在可XML序列化的类型上使用标记接口。然而,如果你不控制你想要序列化的类型,这是行不通的。