C# 使用XmlSerializer序列化IntPtr

C# 使用XmlSerializer序列化IntPtr,c#,xml-serialization,intptr,C#,Xml Serialization,Intptr,我想知道为什么XmlSerializer实现不支持IntPtr类型。当我尝试序列化包含IntPtr类型字段的类时,序列化失败,告诉我不支持IntPtr,并忽略该成员 为了解决这个问题,我将IntPtr值转换为Int64。。。但这是个好主意吗?据我所知,应该是这样。具体来说,我需要序列化一个窗口句柄,它在.NETFramework中是IntPtr类型的。我做得对吗?IntPtr不可序列化的原因是,当您将其从环境中删除时,它通常毫无意义 如果序列化窗口句柄,则只有在窗口仍然存在的情况下,在同一位置对

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


为了解决这个问题,我将IntPtr值转换为Int64。。。但这是个好主意吗?据我所知,应该是这样。具体来说,我需要序列化一个窗口句柄,它在.NETFramework中是IntPtr类型的。我做得对吗?

IntPtr不可序列化的原因是,当您将其从环境中删除时,它通常毫无意义

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


因此,您可以将其强制转换为可序列化的类型,但这取决于您在反序列化时是否仍有意义。

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


因此,将其转换为int64以便序列化是完全合理的。

您是否计划在同一系统、同一环境中反序列化窗口句柄?也就是说,当您反序列化窗口句柄时,它仍然有效吗?当然可以。所有系统句柄在任何时候都可能无效(这就是为什么存在SafeHandle类),因为它们是由系统管理的。但这是另一个主题。这个参数可能适用于所有信息,甚至是字符串。例如,一个字符串可以指定一个共享内存名,在序列化之后它可能没有意义。序列化可以恢复任何对象的位配置,很明显,IntPtr有一个位序列,也可以序列化…@Luca:当然,这是基于数据类型的用途,而不是它们可能(mis)的用途。