我想知道爲什麼IntPtr類型不受XmlSerializer實現支持。當我嘗試序列化一個包含IntPtr類型字段的類時,序列化會告訴我IntPtr不受支持,並忽略該成員。使用XmlSerializer序列化IntPtr
要解決此問題,我將IntPtr值轉換爲Int64 ...但這是一個好主意嗎?據我所知,應該是這樣。具體來說,我需要序列化一個窗口句柄,在.NET框架中鍵入IntPtr。我做得對嗎?
我想知道爲什麼IntPtr類型不受XmlSerializer實現支持。當我嘗試序列化一個包含IntPtr類型字段的類時,序列化會告訴我IntPtr不受支持,並忽略該成員。使用XmlSerializer序列化IntPtr
要解決此問題,我將IntPtr值轉換爲Int64 ...但這是一個好主意嗎?據我所知,應該是這樣。具體來說,我需要序列化一個窗口句柄,在.NET框架中鍵入IntPtr。我做得對嗎?
IntPtr不可序列化的原因是,當您從環境中移除IntPtr時,它通常沒有任何意義。
如果你序列化一個窗口句柄,它只有當你在同一個地方反序列化它時纔有意義,而窗口仍然存在。如果您在另一臺計算機上,另一個應用程序中,或在刪除窗口後將其反序列化,則句柄沒有意義。
因此,您可以將其轉換爲可序列化的類型,但是由您確定在反序列化它時仍然有意義。
將IntPtr視爲void *。如果你想對它做任何有用的事情,你別無選擇,只能將它投向其他東西。
所以是的,將它轉換爲int64以序列化它是非常合理的。
您打算在相同的環境中對同一個系統上的窗口句柄進行反序列化嗎?也就是說,當您反序列化窗口句柄時,窗口句柄仍然有效嗎? – 2010-08-12 22:48:00
當然可以。所有系統句柄在每個時刻都可能是無效的(即SafeHandle類存在的原因),因爲它們是由系統管理的。但這是另一個話題。 – Luca 2010-08-13 07:53:27