System.Tuple(T1,..)
類別標記爲[SerializableAttribute]
(見msdn)。但是它們沒有無參數的構造函數,因此它不能被XmlSerializer
序列化,因爲它在here之前已被清除。那麼爲什麼不添加一個?爲什麼元組沒有無參數構造函數,而`[Serializable]`?
回答
您不需要使用[Serializable]
屬性將其序列化爲XmlSerializer
,類型具有該屬性的事實並不意味着您可以使用XmlSerializer
將其序列化;這兩者是無關的。 [Serializable]
僅用於二進制序列化(*)(不需要無參數構造函數)。
概括起來:
- 二進制序列
- 需要
[Serializable]
屬性 - 不需要公共參數構造函數
- 需要
- XML序列化
- 不需要
[Serializable]
屬性 - 需要
public
參數的構造函數
- 不需要
因此,使用XmlSerializer
你不能序列化Tuple<...>
。
不管上述情況,Tuple<...>
可以有一個默認的構造函數,但它沒有多大意義:元組是不可變的(你不能設置其屬性),所以如果你用默認創建的實例構造函數,屬性將始終具有其默認值,無法更改。 (而且,事實上,屬性是隻讀的,也未嘗防止元組被序列化與XmlSerializer
,只支持公共讀寫屬性)
(*)其實,不只是二進制序列化,但任何序列化格式(如BinaryFormatter
,SoapFormatter
...)
圍繞這個問題的這種裙子。我相信問題的精神在於 - 爲什麼Tuple沒有公共無參數構造函數,因此它可以與XmlSerializer一起使用? – bodangly
@bodangly OP似乎認爲因爲Tuple是'[Serializable]',它應該有一個無參數的構造函數,並且可以用'XmlSerializable'來序列化,這是不正確的 –
@bogdanly我更新了我的答案 –
- 1. 爲什麼基類(不實現Serializable)如果其子類實現Serializable,應該沒有參數構造函數?
- 2. 爲什麼System.Data.SqlClient.SqlDataReader沒有構造函數
- 3. PhoneApplicationPage沒有無參數構造函數
- 4. System.Data.Entity.Spatial.DbGeography - 沒有無參數構造函數
- 5. 沒有參數的構造函數或參數構造函數
- 6. 爲什麼StringBuffer允許StringBuffer作爲其構造函數的參數,即使StringBuffer沒有StringBuffer構造函數?
- 7. 無參數構造函數調用2參數構造函數
- 8. 沒有爲此對象定義的無參數構造函數。
- 9. 沒有爲此對象定義的無參數構造函數
- 10. 沒有爲此對象定義的無參數構造函數?
- 11. 無參數構造函數
- 12. 無參數構造函數
- 13. 爲什麼IllegalAccessError不具有雙參數構造函數?
- 14. 爲什麼我無法從私有類中的參數化構造函數調用默認構造函數?
- 15. 元組不能被序列化,因爲它沒有參數的構造函數
- 16. 空的構造函數和沒有構造函數有什麼區別
- 17. 什麼可能導致「JAXBElement沒有無參數默認構造函數」?
- 18. 爲什麼對象的構造函數返回Object()而不是構造函數?
- 19. 爲什麼調用複製構造函數而不是移動構造函數?
- 20. 爲什麼這個構造函數調用另一個沒有參數?
- 21. 爲什麼沒有使用可變參數的List構造函數?
- 22. 爲什麼在容器的構造函數中沒有容量參數?
- 23. 爲什麼構造函數不是構造函數?
- 24. 爲什麼沒有爲std :: string保留構造函數?
- 25. 爲什麼我不能強制派生類具有無參數構造函數?
- 26. 構造函數和無參數構造函數?
- 27. 有什麼好的理由,爲什麼ArrayList不把數組作爲構造函數參數?
- 28. 需要添加無參數構造函數。困惑什麼也
- 29. 結構圖沒有爲此對象定義的無參數構造函數
- 30. 爲什麼一個靜態構造沒有任何參數
我不明白爲什麼這是被低估。任何知道序列化應該如何工作的人都是一個相當有趣的問題。 –
誰投票結束,因爲它「主要是基於意見」顯然不明白這個問題。 –
@ThomasLevesque問題是讓人猜測爲什麼這個框架類的設計方式是這樣的。這完全是基於意見的。考慮到你發佈了一個答案,甚至沒有試圖回答被問到的問題,即爲什麼這個類沒有無參數的構造函數,似乎你是不瞭解問題的那個。 – Servy