c# – 为什么元组在`[Serializable]`时没有无参数构造函数?

标有[SerializableAttribute]的System.Tuple(T1,..)类(参见msdn).但它们没有无参数构造函数,因此XmlSerializer不能序列化,因为它在here之前已被清除.那么为什么不添加一个呢?

解决方法:

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

把它们加起来:

>二进制序列化

>需要[Serializable]属性
>不需要公共无参数构造函数

> XML序列化

>不需要[Serializable]属性
>需要一个公共无参数构造函数

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

无论如何,Tuple< ...>可能有一个默认的构造函数,但它没有多大意义:元组是不可变的(你不能设置它们的属性),所以如果你用默认的构造函数创建一个实例,那么属性总是有它们的默认值而且不能改变. (另外,属性是只读的这一事实也可以防止使用XmlSerializer序列化元组,XmlSerializer只支持公共读写属性)

(*)实际上,不仅仅是二进制序列化,而是任何序列化格式化程序(例如BinaryFormatter,SoapFormatter ……)

上一篇:c# – 对元组列表进行排序时的默认行为是什么?


下一篇:python – django模板中的元组列表