使用XmlSerializer序列化IntPtr

时间:2010-08-12 22:25:20

标签: c# xml-serialization intptr

我想知道为什么XmlSerializer实现不支持IntPtr类型。当我尝试序列化包含IntPtr类型字段的类时,序列化失败告诉我不支持IntPtr,并忽略该成员。

要解决此问题,我将IntPtr值转换为Int64 ......但这是一个好主意吗?应该是,我能想到的。具体来说,我需要序列化一个窗口句柄,它在.NET框架中输入IntPtr。我做得对吗?

2 个答案:

答案 0 :(得分:3)

IntPtr不可序列化的原因是,当它从环境中移除时,它通常没有任何意义。

如果序列化窗口句柄,只有在同一位置反序列化它时才有意义,而窗口仍然存在。如果在不同的计算机上,在不同的应用程序中或在删除窗口后反序列化它,则句柄没有意义。

因此,您可以将其强制转换为可序列化的类型,但是在您对其进行反序列化时,请确保它仍然有意义。

答案 1 :(得分:0)

将IntPtr视为void *。如果你想对它做任何有用的事情,你别无选择,只能把它投射到其他东西上。

所以是的,将它转换为int64以便序列化它是完全合理的。