Сериализация IntPtr с использованием XmlSerializer - PullRequest
1 голос
/ 13 августа 2010

Мне интересно, почему тип IntPtr не поддерживается реализацией XmlSerializer. Когда я пытаюсь сериализовать класс, включающий поле типа IntPtr, сериализация завершается неудачно, сообщая, что IntPtr не поддерживается, и игнорирую этот член.

Чтобы обойти это, я переводил значение IntPtr в Int64 ... но это хорошая идея? Так и должно быть, насколько я могу подумать. В частности, мне нужно сериализовать дескриптор окна, который набирается IntPtr в .NET Framework. Я правильно делаю?

Ответы [ 2 ]

3 голосов
/ 13 августа 2010

Причина, по которой IntPtr не сериализуем, состоит в том, что он вообще не имеет никакого смысла, когда вы удаляете его из его среды.

Если вы сериализуете дескриптор окна, это имеет смысл, только если выдесериализовать его в том же месте, пока окно еще существует.Если вы десериализовали его на другом компьютере, в другом приложении или после удаления окна, дескриптор не имеет смысла.

Итак, вы можете привести его к типу, который можно сериализовать, но дочтобы убедиться, что это все еще имеет смысл, когда вы десериализуете его.

0 голосов
/ 13 августа 2010

Думайте о IntPtr как о пустом *. Если вы хотите сделать что-нибудь полезное с этим, у вас нет выбора, кроме как применить это к чему-то другому.

Так что да, приведение к int64 для сериализации вполне разумно.

...