平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

シリアライズ・デシリアライズ早分かり

(この記事は、C# Advent Calendar jp: 2010の7日目の記事です。前日は、えむナウさんでした。)
C#の、というか.NETのシリアライズ・デシリアライズ技術は統一感がなさ過ぎてカオスなので、簡単にまとめる。

リアライザー リアライザブル 対象テクノロジー 説明
IFormatter
Formatter
BinaryFormatter
SoapFormatter(もう使わない方がいい)
ISerializable
Serializable属性
.NETリモーティング
ASP.NETセッション情報など
型情報および全フィールド⇔バイナリストリーム
FormatterServicesがごにょごにょするのでリフレクションより速い
メモリダンプみたいなもので、型の実装に依存する
バージョン違いでも互換性がなくなることも
XmlSerializer IXmlSerializable
XmlRoot属性を含むXMLシリアル化を制御する属性
ASP.NET Webサービス
DataSet
構成ファイル(ApplicationSettingsBase)
publicなフィールドとプロパティ⇔XML
フィールドやプロパティを読み書きするクラスを自動生成する(ご丁寧にソースコードを吐き出してコンパイルする)
XMLスキーマとお友達になれるかも
XmlObjectSerializer
DataContractSerializer
NetDataContractSerializer
DataContractJsonSerializer
DataContract属性, DataMember属性
または
ISerializable
Serializable属性
または
IXmlSerializable
WCF 属性をつけたメンバー, または型情報および全フィールド⇔XMLノードストリーム⇔XML, バイナリ, JSONなど
WCFでリモーティングとSOAPが統合されたのに対応している
DynamicMethodあたりを使っていると思われる
複雑
XamlWriter
XamlXmlWriter
XamlObjectWriter
XamlReader
XamlXmlReader
XamlObjectReader
(勉強不足ゆえ不明。なんでもOK?) WPF
Silverlight
Windows Workflow Foundation(WF)
オブジェクトグラフ⇔XAMLノードストリーム⇔XML
平たく言えばXAMLシリアライズ・デシリアライズする
リフレクションを使っている(と思う)

(2011年12月11日追記)neueccさんの2011年版AC向けエントリもシリアライズ・デシリアライズ絡みだったので、リンクしておきます。
neue cc - .NETの標準シリアライザ(XML/JSON)の使い分けまとめ