1

なぜ IntPtr 型が XmlSerializer 実装でサポートされていないのか疑問に思っています。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 に答える