Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2014年07月23日]

Catel のシリアライザ、結局使わないことにしました(ぉぃ

2014年07月27日 08:51更新 筆者:K.Ktouth

昨日の日記で書いた「XmlAttribute 属性をつけるとルートモデルで無い限りシリアライズ処理された値が無くなる」という現象ですが、どうも意図的な仕様変更である模様
GitHub のソースコードをたぐっていくとほぼ1年ほど前にCTL-4というタグがついた変更があり、その中でシリアライズ処理を大幅刷新していました。現在では XmlSerializer 内部で行われるような処理がこの頃は ModelBase に直接記述されていたようで、リファクタリングされたって事ですね。
で、その際に出力処理から意図的にアトリビュートへの出力を無視するようにしている模様。さらには直後の更新でテストコードの方からもそのあたりのテストを消しているように見えます。詳しくは追っていませんが。
要するに「もとよりドキュメント外の仕様で」「意図的に消されて」「1年以上リベートされない」と言うことはすなわち「XmlAttribute属性は使ってはならない仕様」になったって事ですね。シリアライザの方は対応コードがまるまる残っているあたり中途半端にしか見えませんが、まぁ、そういうことのようです。

……んー、となると、ほとんど「.NET 標準機能の DataContract で出来ることしか出来ない」「それ以上のことを望むなら .NET 標準機能の IXmlSerializable を使え」に行き着くよーな。マルチプラットフォームなら意味があるのかな?……調べると Android や iOS まで想定しない、つまりは .NET の範囲内なら DataContract がフル対応しているという……げー

本日のリンク元
その他のリンク元
検索