我在寫一個泛型類,試圖將Type T的對象序列化爲XML。不幸的是(我敢肯定你知道),並不是所有的對象都可以成功地序列化爲XML,因此我希望能夠編寫一個約束來指定T只能是一個XML序列化的類。這是可能嗎?通用類約束 - 我可以指定通用類型可以序列化爲XML嗎?
很確定這個答案是「不」,但是我想問問我有沒有錯過的東西。
我在寫一個泛型類,試圖將Type T的對象序列化爲XML。不幸的是(我敢肯定你知道),並不是所有的對象都可以成功地序列化爲XML,因此我希望能夠編寫一個約束來指定T只能是一個XML序列化的類。這是可能嗎?通用類約束 - 我可以指定通用類型可以序列化爲XML嗎?
很確定這個答案是「不」,但是我想問問我有沒有錯過的東西。
你說得對,答案是否定的,你不能將泛型類型限制爲XML序列化。
原因是XML序列化程序有一些關於它將序列化的特定規則(最值得注意的是,它僅對公共屬性進行序列化,並且只對具有公共無參數構造函數的類型進行序列化)。使類XML可序列化的因素不能用類型來表示,因此無法對其進行通用約束。
您可以限制爲一個接口,所以也許解決方案是在XML序列化的類型上使用標記接口。然後再次,如果你不控制你想要序列化的類型,這不起作用。
嗨,是的,我沒有控制可能seralized的類型(這就是爲什麼我使用泛型)。謝謝。 – jamiet
唯一可用的約束條件是:
class
/struct
new()
BaseType
/Interface
在這些中,只有2個是略微令人感興趣的爲:new()
(自XmlSerializer
要求公共無參數構造函數)和:Interface
(因爲IXmlSerializable
是其中的一個選項);但是:
IXmlSerializable
不需要,使不適因此,在短期:沒有,這是不是你可以通過通用的約束強制
很好的答案,謝謝Marc。 – jamiet
可能的重複[如何添加一個類型約束來包含任何序列化的泛型方法?](http://stackoverflow.com/questions/945495/how-can-i-add-a-type-constraint -to-include-anything-serializable-in-a-generic-me) – ESV