System.Tuple(T1,..)
的 [SerializableAttribute]
个类(请参阅msdn)。但他们没有无参数构造函数,因此XmlSerializer
不能序列化,因为它在here之前已被清除。那么为什么不加一个呢?
答案 0 :(得分:4)
您不需要使用[Serializable]
属性的类型来使用XmlSerializer
序列化它,并且类型具有该属性的事实并不意味着您可以序列化它与XmlSerializer
;这两者是无关的。 [Serializable]
仅用于二进制序列化(*)(它不需要无参数构造函数)。
总结一下:
[Serializable]
属性[Serializable]
属性public
无参数构造函数因此,您无法使用Tuple<...>
序列化XmlSerializer
。
无论上述情况如何,Tuple<...>
都可以有一个默认的构造函数,但它没有多大意义:元组是不可变的(你不能设置它们的属性),所以如果你创建了一个使用默认构造函数的实例,属性将始终具有其默认值,并且无法更改。 (另外,属性是只读的这一事实也可以阻止使用XmlSerializer
序列化元组,这只支持公共读写属性)
(*)实际上,不只是二进制序列化,而是任何序列化格式化程序(例如BinaryFormatter
,SoapFormatter
...)