我想知道为什么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