为什么元组在“[可序列化]”时没有无参数构造函数
本文关键字:构造函数 参数 元组 序列化 为什么 | 更新日期: 2023-09-27 17:53:22
System.Tuple(T1,..)
标有[SerializableAttribute]
的类(请参阅 msdn(。但是它们没有无参数构造函数,因此无法通过XmlSerializer
序列化,因为它之前在这里被清除了。那么为什么不添加一个呢?
你不需要一个类型来拥有 [Serializable]
属性来用 XmlSerializer
序列化它,并且类型具有该属性的事实并不意味着你可以用 XmlSerializer
序列化它; 两者无关。 [Serializable]
仅用于二进制序列化 (*((不需要无参数构造函数(。
总结一下:
- 二进制序列化
- 需要
[Serializable]
属性 - 不需要公共无参数构造函数
- 需要
- XML 序列化
- 不需要
[Serializable]
属性 - 需要一个
public
无参数构造函数
- 不需要
因此,您无法使用 XmlSerializer
序列化Tuple<...>
。
不管上面有什么,Tuple<...>
可以有一个默认的构造函数,但它没有多大意义:元组是不可变的(你不能设置它们的属性(,所以如果你创建了一个使用默认构造函数的实例,属性将始终具有它们的默认值,并且无法更改。(此外,属性是只读的事实也是防止元组使用 XmlSerializer
序列化的原因, 只支持公共读写属性(
(*( 实际上,不仅仅是二进制序列化,而是任何序列化格式化程序(例如 BinaryFormatter
, SoapFormatter
...