(この記事は、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)の使い分けまとめ