2011-10-19 55 views
2

我在寫一個泛型類,試圖將Type T的對象序列化爲XML。不幸的是(我敢肯定你知道),並不是所有的對象都可以成功地序列化爲XML,因此我希望能夠編寫一個約束來指定T只能是一個XML序列化的類。這是可能嗎?通用類約束 - 我可以指定通用類型可以序列化爲XML嗎?

很確定這個答案是「不」,但是我想問問我有沒有錯過的東西。

+0

可能的重複[如何添加一個類型約束來包含任何序列化的泛型方法?](http://stackoverflow.com/questions/945495/how-can-i-add-a-type-constraint -to-include-anything-serializable-in-a-generic-me) – ESV

回答

4

你說得對,答案是否定的,你不能將泛型類型限制爲XML序列化。

原因是XML序列化程序有一些關於它將序列化的特定規則(最值得注意的是,它僅對公共屬性進行序列化,並且只對具有公共無參數構造函數的類型進行序列化)。使類XML可序列化的因素不能用類型來表示,因此無法對其進行通用約束。

您可以限制爲一個接口,所以也許解決方案是在XML序列化的類型上使用標記接口。然後再次,如果你不控制你想要序列化的類型,這不起作用。

+0

嗨,是的,我沒有控制可能seralized的類型(這就是爲什麼我使用泛型)。謝謝。 – jamiet

5

唯一可用的約束條件是:

  • class/struct
  • new()
  • BaseType/Interface

在這些中,只有2個是略微令人感興趣的爲:new()(自XmlSerializer要求公共無參數構造函數)和:Interface(因爲IXmlSerializable是其中的一個選項);但是:

  • IXmlSerializable需要,使不適
  • 沒有限制迫使這裏的類型是公共類型(以及公共類型的公共型的,在案件的嵌套類型)
  • 它不佔仿製藥的限制

因此,在短期:沒有,這是不是你可以通過通用的約束強制

+0

很好的答案,謝謝Marc。 – jamiet

相關問題