为什么元组在“[可序列化]”时没有无参数构造函数

本文关键字:构造函数 参数 元组 序列化 为什么 | 更新日期: 2023-09-27 17:53:22

System.Tuple(T1,..)

[SerializableAttribute]的类(请参阅 msdn(。但是它们没有无参数构造函数,因此无法通过XmlSerializer序列化,因为它之前在这里被清除了。那么为什么不添加一个呢?

为什么元组在“[可序列化]”时没有无参数构造函数

你不需要一个类型来拥有 [Serializable] 属性来用 XmlSerializer 序列化它,并且类型具有该属性的事实并不意味着你可以用 XmlSerializer 序列化它; 两者无关。 [Serializable]仅用于二进制序列化 (*((不需要无参数构造函数(。

总结一下:

  • 二进制序列化
    • 需要 [Serializable] 属性
    • 不需要公共无参数构造函数
  • XML 序列化
    • 不需要 [Serializable] 属性
    • 需要一个public无参数构造函数

因此,您无法使用 XmlSerializer 序列化Tuple<...>


不管上面有什么,Tuple<...>可以有一个默认的构造函数,但它没有多大意义:元组是不可变的(你不能设置它们的属性(,所以如果你创建了一个使用默认构造函数的实例,属性将始终具有它们的默认值,并且无法更改。(此外,属性是只读的事实也是防止元组使用 XmlSerializer 序列化的原因, 只支持公共读写属性(


(*( 实际上,不仅仅是二进制序列化,而是任何序列化格式化程序(例如 BinaryFormatterSoapFormatter ...