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

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

XmlSerializer

作成中プログラムにて、XmlSerializerを使ったオブジェクトのシリアライズを検討しています。
以前の.NET FrameworkのXmlSerializerでは、未知のノードがあるとか、あるはずのノードがないとか(つまり、同アプリの別バージョンでシリアライズした)いうファイルを読み込もうとしただけで例外が起こっていて使い物になりそうになかったのですが、2.0になってその辺は解消されたらしいですね。.NET Compact Frameworkではどうか確認してないですが、まあ、まさかその辺は古い仕様のままなんてことはないでしょう――。
ひとまず、これなら設定ファイルになら使えそう。ただ、保存するデータオブジェクトが複雑な構成だったり、設定の読み書きの後にいろいろエラー処理をしないといけないとかがあるので、本当にXmlSerializerが使えるかどうかは、あらためて検討をしてみる必要がありますかねえ。
とりあえず、保存するべきデータをYAMLで表してみました。

一つ目のデータ
-
  name:文字列
  defaultmarginsize:
    width:数値
    height:数値
  drawmethod:
    -文字列
    -文字列
    -文字列
    -文字列
-
 以下、同じオブジェクトのリスト・・・
二つ目のデータ
-
  point:
    x:数値
    y:数値
  margin:
    width:数値
    height:数値
  backcolor:forecolor:framecolor:text:文字列
  comment:文字列
  shapeclass:一つ目のデータオブジェクトへの参照(オブジェクトの名前を保存して、実行時に関連づける)
-
 以下、同じオブジェクトのリスト・・・

一つ目のデータは何とかなりそうですが、二つ目のは厳しそう・・・。どうしても無理ならリフレクションを使って独自でやるとかいう形になるのかなあ。XmlSerializerを使うか使わないか、どっちが手数を減らせるかどうかについても検討する必要がある。