【问题标题】:Generic class constraints - can I specify that the Generic type can be serialized as XML?泛型类约束 - 我可以指定泛型类型可以序列化为 XML 吗?
【发布时间】:2011-12-11 06:24:54
【问题描述】:

我正在编写一个尝试将类型 T 的对象序列化为 XML 的通用类。不幸的是(我相信您知道)并非所有对象都可以成功地序列化为 XML,因此我希望能够编写一个约束,指定 T 只能是 XML 可序列化的类。这有可能吗?

很确定这个问题的答案是“不”,但我想我还是会问,以防我遗漏了什么。

【问题讨论】:

标签: c# xml-serialization


【解决方案1】:

唯一可用的约束是:

  • class / struct
  • new()
  • BaseType / Interface

其中,仅有的两个有点有趣的是:new()(因为XmlSerializer 需要公共无参数构造函数)和:Interface(因为IXmlSerializable 是选项之一) ;但是:

  • IXmlSerializable 不是必需的,因此不适用
  • 此处没有约束强制类型为 public 类型(以及在嵌套类型的情况下为公共类型的公共类型)
  • 它没有考虑泛型限制

简而言之:不,这不是您可以通过通用约束强制执行的事情

【讨论】:

    【解决方案2】:

    您是对的,答案是否定的,您不能将泛型类型限制为 XML 可序列化。

    这样做的原因是 XML 序列化器有一些非常具体的关于它将序列化什么的规则(最值得注意的是,它只序列化公共属性,并且只序列化具有公共无参数构造函数的类型)。使类 XML 可序列化的因素不能用类型来表示,因此无法对其进行通用约束。

    您可以限制到一个接口,因此解决方案可能是在您的类型上使用可 XML 可序列化的标记接口。再说一次,如果您不控制要序列化的类型,这将不起作用。

    【讨论】:

    • 嗨,是的,我无法控制可能被序列化的类型(这就是我使用泛型的原因)。谢谢。
    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多