使用 XmlSerializer 序列化 IntPtr

发布于 2024-09-14 03:24:08 字数 205 浏览 6 评论 0原文

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

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

I'm wondering why the IntPtr type is not supported by the XmlSerializer implementation. When I try to serialize a class including a field of IntPtr type, the serialization fails telling me that IntPtr is not supported, and ignore that member.

To workaround this, I translate the IntPtr value to a Int64... but is it a good idea? It should be, as far I can think. In concrete, I need to serialize a window handle, which is typed IntPtr in .NET framework. Am I doing correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪化雨蝶 2024-09-21 03:24:08

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

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

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

The reason that an IntPtr is not serializable is that it generally doesn't make any sense at all when you remove it from it's environment.

If you serialize a window handle, it only makes sense if you deserialize it in the same spot, while the window still exists. If you deserialize it on a different computer, in a different application, or after the window is removed, the handle has no meaning.

So, you can cast it to a type that is serializable, but it's up to you to make sure that it still makes sense when you deserialize it.

我还不会笑 2024-09-21 03:24:08

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

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

Think of IntPtr as void*. If you want to do anything useful with it, you have no choice but to cast it to something else.

So yes, casting it to int64 in order to serialize it is perfectly reasonable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文