1

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

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

4

2 回答 2

3

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

如果您序列化一个窗口句柄,那么只有在窗口仍然存在时在同一个位置反序列化它才有意义。如果您在不同的计算机上、在不同的应用程序中或在窗口被删除后对其进行反序列化,则句柄没有任何意义。

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

于 2010-08-12T22:33:24.803 回答
0

将 IntPtr 视为 void*。如果你想用它做任何有用的事情,你别无选择,只能把它转换成别的东西。

所以是的,将其转换为 int64 以便对其进行序列化是完全合理的。

于 2010-08-13T19:59:02.540 回答