- PR -

XML シリアル化について

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-23 07:47
Kazukiさんの、
http://blogs.wankuma.com/jitta/archive/2005/10/16/18721.aspx
これと関係するかなぁ?ジェネリックをそのままシリアライズできないようです。

ハッシュテーブルのほう、実は、シリアライズできないようなぁ。。。と思いながら、書いていました。というのも、Key も Value も Object ですから、シリアライズ可能かどうかが分からないからです。

なので、Hashtable をメンバに持つクラスをシリアライズするときと、Hashtable を継承したクラスをシリアライズするときで、やり方が変わると思います。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-04-23 10:13
私のは,XmlSerializerで試していました。
SoapFormatterだとIList<TKey, TValue>も駄目ですねorz

BinaryFormatterだと特に問題なさげです。

[ メッセージ編集済み 編集者: Kazuki 編集日時 2006-04-23 10:43 ]
Pluto
常連さん
会議室デビュー日: 2002/07/01
投稿数: 40
投稿日時: 2006-04-23 11:54
Kazuki さん、Jitta さん、度々ご返答有難うございます。

私もいろいろと試行錯誤してみましたが駄目でした。

やはり、MSDN に記載されているように、IDictionary を実装するオブジェクトをシリアル化する場合は、独自のシリアル化機能を実装しなければならないということですかね...

でも、Hashtable や Dictionary クラスに実装されている ISerializable インターフェイスは、一体どういう意味なのでしょう...やはり、何だかすっきりしないです...
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-23 14:33
引用:

Plutoさんの書き込み (2006-04-23 11:54) より:

でも、Hashtable や Dictionary クラスに実装されている ISerializable インターフェイスは、一体どういう意味なのでしょう...やはり、何だかすっきりしないです...


ASP.NET の Session 変数には入れれますよね → Hashtable
でもそっちは SerializableAttribute か・・・
Pluto
常連さん
会議室デビュー日: 2002/07/01
投稿数: 40
投稿日時: 2006-04-23 15:38
かるあさん、ご返答有難うございます。

引用:

かるあさんの書き込み (2006-04-23 14:33) より:

ASP.NET の Session 変数には入れれますよね → Hashtable
でもそっちは SerializableAttribute か・・・



上記の場合、「クラスがシリアル化処理を制御する ISerializable インターフェイスを実装している場合でも、SerializableAttribute 属性を適用する」ということですかね(以下参照)。

http://msdn2.microsoft.com/ja-JP/library/system.serializableattribute(VS.80).aspx

そうなると、Dictionary クラスに実装されている ISerializable インターフェイスって...やはり、これらの XML シリアル化は、単純にはできないのですかね...
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-23 18:03
XmlSerializer を使ったシリアル化は、SerializableAttribute や ISerializable は関係ないですよね。
Hashtable や Dictionary の ISerializable は、BinaryFormatter や SoapFormatter に関係するという事でしょう。

他にも
http://support.microsoft.com/default.aspx?scid=kb;ja;814187
のような問題があるようです。

XmlSerializer の限界、という事でしょうか。
_________________
囚人のジレンマな日々
Pluto
常連さん
会議室デビュー日: 2002/07/01
投稿数: 40
投稿日時: 2006-04-23 18:24
囚人さん、ご返答有難うございます。

引用:

囚人さんの書き込み (2006-04-23 18:03) より:

Hashtable や Dictionary の ISerializable は、BinaryFormatter や SoapFormatter に関係するという事でしょう。



というのは、Hashtable や Dictionary の ISerializable は、XML シリアル化には関係ないということでしょうか?
そうであれば、やはり、XmlSerializer の限界ということであり、このような場合は、独自のシリアル化機能を実装しなければならないですかね...
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-23 19:02
引用:

というのは、Hashtable や Dictionary の ISerializable は、XML シリアル化には関係ないということでしょうか?


のはずです。XmlSerializer を制御するのは、System.Xml.Serialization 名前空間の属性群です。

XmlSerializer のドキュメントにもありますが、IEnumerable と ICollection を実装するクラスは特別扱いです。
引用:

1 つのパラメータを受け取るパブリックな Add メソッドを実装している必要があります。


Hashtable や Dictionary はそれに反している、ということですね。

Hashtable の方は SoapFormatter でシリアル化できるようですし(多分)、それが気に入らないなら、独自実装になるのでしょう。
_________________
囚人のジレンマな日々

スキルアップ/キャリアアップ(JOB@IT)