Hatena::ブログ(Diary)

猫とC#について書くmatarilloの雑記 Twitter

2010年12月07日

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

| シリアライズ・デシリアライズ早分かりを含むブックマーク シリアライズ・デシリアライズ早分かりのブックマークコメント

(この記事は、C# Advent Calendar jp: 2010の7日目の記事です。前日は、えむナウさんでした。)

C#の、というか.NETのシリアライズ・デシリアライズ技術は統一感がなさ過ぎてカオスなので、簡単にまとめる。

シリアライザーシリアライザブル対象テクノロジー説明
IFormatter
Formatter
BinaryFormatter
SoapFormatter(もう使わない方がいい)
ISerializable
Serializable属性
.NETリモーティング
ASP.NETセッション情報など
型情報および全フィールド⇔バイナリストリーム
FormatterServicesごにょごにょするのでリフレクションより速い
メモリダンプみたいなもので、型の実装に依存する
バージョン違いでも互換性がなくなることも
XmlSerializerIXmlSerializable
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)の使い分けまとめ

トラックバック - http://d.hatena.ne.jp/matarillo/20101207