- - PR -
XML シリアル化について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-23 20:08
囚人さん、ご教示有難うございます。
確かに、上記のメモを読むと、何となく首をたてにふることができます(うん、うん)。 Hashtable や Dictionary を XML シリアル化する場合は、やはり、独自のシリアル化機能を実装する必要がありそうですね... でも、XmlSerializer も SoapFormatter も似たようなものだと思うのですが...それで、ISerializable の制御が変わるようなものなのでしょうか? | ||||||||||||
|
投稿日時: 2006-04-24 01:00
似ているというだけで、別物と思ったほうが良いのではないでしょうか。 XmlSerializerとISerializableは無関係のようですし。 ISerializable自体はFormatterに対してシリアライズの独自実装を示すもので、シリアライズできるできないを表すものでもないですよね。 | ||||||||||||
|
投稿日時: 2006-04-24 08:45
確かに出力は同じ XML で似ていなくもないので、腑に落ちない気はしますね。 しかし、もう一度言いますが、XmlSerializer と ISerializable 及び SerializableAttribute は関係ないです。よって、
の答えは「そもそも XmlSerializer は ISerializable を使っていない」です。 どうやら素直に独自実装するしかないようですね。 _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-04-24 22:15
脱線失礼
これは要注意です。 「セッション変数に入れられるから、シリアライズ可能」ではありません。 なぜなら、この文では、セッションをどこに保持するかが定義されていないからです。 セッションが InProc なら、シリアライズ不可能なオブジェクトも、セッション変数に格納できます(シリアライズしないから)。 それ以外なら、シリアライズ可能なオブジェクトだけが、セッション変数に格納できます。 ※ Hashtable がセッション変数に入れられるかどうかを問題にしていないことに注意してください ※ セッション変数に入れられるかどうかの“前提”を問題にしています | ||||||||||||
|
投稿日時: 2006-04-24 22:17
根本的なところが違います。 XmlSerializer では、シリアル化したオブジェクトを復元することは出来ません。 BinaryFormatter、SoapFormatter では、シリアル化したオブジェクトを復元することも出来ます。 System.Xml.Serialization.XmlSerializer System.Runtime.Serialization.Formatters.Soap.SoapFormatter System.Runtime.Serialization.Formatters.Binary.BinaryFormatter MSDN では、「バイナリシリアル化」と「XML シリアル化と SOAP シリアル化」のように分類していますが、名前空間から見れば、違うことが明らかです。 〆 written by Jitta@わんくま同盟 on 2006/04/24 □ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006 | ||||||||||||
|
投稿日時: 2006-04-25 00:32
Jitta さん、囚人さん、minminnana さん、皆様大切なご教示有難うございます。
ということは、アプリケーションの状態を永久オブジェクト(ストレージ)として保存・復元させるような場合は、BinaryFormatter、または SoapFormatter で行わなければならないということでしょうか? しかし、シリアル化したオブジェクト(ファイル)を、何らかの事象により、人為的に作成(または修正)をしなければならないようことを考慮した場合、「バイナリシリアル化」では可視的に無理なので、「SOAP シリアル化」で行うというものになるのでしょうか? XmlSerializer や、BinaryFormatter、SoapFormatter が、名前空間で異なることは理解できるのですが、これらの根本的な違い(操作性、利便性など)が良く分かりませんでした。 | ||||||||||||
|
投稿日時: 2006-04-25 06:35
そうともいえるし、そうで無いともいえます。
いえ。SOAP シリアル化では、どこに何があるのか、人間にはわかりにくいです。 とりあえず、先に示したトピックと、その周辺のトピックを一読いただけませんか? 読んでいらしたら、あるひとつの違いが明確に書いてあるので、そのことが出てくると思うのですが、出てきていないので「まだ読まれていない」と判断しています。 | ||||||||||||
|
投稿日時: 2006-04-25 09:47
SQLServer は試したことが無いのでわかりませんが StateServer のときにも Hashtable を格納することが出来ませんでしたっけ?
セッション変数に入れられるもの=シリアライズ可能なオブジェクト では無いってことでしょうか、 確かに WebService のときに ArrayList や HashTable を渡そうとして 出来なかったためにヘルパークラスを作った覚えがあります... |