高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

XmlSerializerについていろいろ

XmlSerializerは、.NET Frameworkの便利クラスの一つで、指定したクラスをXMLに保存・読込みするクラスです。
対象になるのはそのクラスのプロパティすべてで、そのプロパティすべてをXMLに書き込み、読込みしてくれる。値の変換とかは考えなくていいです。ただ、ソフトのバージョンアップ等で値が変化したときに耐えられるのか、その辺がちょっと懸念でした。
ということで、XmlSerializerというものについて、いろいろ調べてみたのでメモ
.NET Framework1.1の時は違ったような気がしますが・・・ とにもかくにも、.NET Framework2.0ではXmlSerializerは結構融通の利くクラスになっていました。

  • ロードしたXMLにないプロパティが追加された場合、そのプロパティの値はデフォルト値のまま
  • ロードしたXMLにあるプロパティが消滅している場合、その値は無視
  • ロードしたXMLにあるプロパティの型が変わっている場合、変換できれば通常通り値をプロパティに反映、変換できなければエラーとなる(bool→string=○、bool→int=× 例外のInnerExceptionで何が起こったか確認できる)
  • XmlSerializer.SerializeにはXmlTextWriter等が指定できるが、編集中のXmlTextWriter等をわたしてはならない(生成されるドキュメントが壊れます)

おお、割とフレキシブルに対応してくれるようですね、バージョンアップでプロパティが追加、削除、変更されたりしても、これなら問題なく使えそうです。ただ、XmlDocumentなどをいじるよりかなり時間かかっている感じです。処理が処理だから仕方がないか。
わたしはよく分かりませんでしたが属性を使えば表記もいろいろカスタマイズできそうですね、デフォルトではいまいち洒落っ気のないシリアライズXMLも、これを使えば少しはきれいなものになるかもしれません。