我想知道为什么 XmlSerializer 实现不支持 IntPtr 类型。当我尝试序列化包含 IntPtr 类型字段的类时,序列化失败并告诉我不支持 IntPtr,并忽略该成员。
为了解决这个问题,我将 IntPtr 值转换为 Int64 ......但这是个好主意吗?应该是,就我所能想到的。具体来说,我需要序列化一个窗口句柄,它在 .NET 框架中输入为 IntPtr。我做得对吗?
我想知道为什么 XmlSerializer 实现不支持 IntPtr 类型。当我尝试序列化包含 IntPtr 类型字段的类时,序列化失败并告诉我不支持 IntPtr,并忽略该成员。
为了解决这个问题,我将 IntPtr 值转换为 Int64 ......但这是个好主意吗?应该是,就我所能想到的。具体来说,我需要序列化一个窗口句柄,它在 .NET 框架中输入为 IntPtr。我做得对吗?
IntPtr 不可序列化的原因是,当您将其从环境中删除时,它通常根本没有任何意义。
如果您序列化一个窗口句柄,那么只有在窗口仍然存在时在同一个位置反序列化它才有意义。如果您在不同的计算机上、在不同的应用程序中或在窗口被删除后对其进行反序列化,则句柄没有任何意义。
因此,您可以将其强制转换为可序列化的类型,但您需要确保在反序列化时它仍然有意义。
将 IntPtr 视为 void*。如果你想用它做任何有用的事情,你别无选择,只能把它转换成别的东西。
所以是的,将其转换为 int64 以便对其进行序列化是完全合理的。