メモ程度
ぜんぶMSDNとかに書いてある内容だと思いますが。

シリアライズの方法

方法1:XmlSerializerを使う
Xmlフォーマットのテキストで保存するので、移植性やバージョン間の互換性をとりやすい
方法2:クラスにSerializableAttributeをつける
private含めフィールドを保存する
保存したくないフィールドにはNonSerializedAttributeをつける
方法3:ISerializableインターフェイスを実装する
方法2よりカスタマイズしやすい。
インターフェイスのGetObjectDataと、それと同じ引数のコンストラクタを作る。詳しくはMSDN
SerializableAttributeもつける必要がある

方法2と3は、バージョンアップでフィールドを追加するとDeserializeできなくなるかもしれないので注意が必要。

注意点

自分がつまずいた点をいくつか

Deserialize時はインスタンスの作成順番が特殊

たとえばDeserialize時の特殊コンストラクタ実行時はフィールドは初期化されていない。
フィールドがListだったばあい、Listの容量は確保されているけど、
その先の個々の要素は上記コンストラクタ終了後にnewされる
Deserialize後に別途初期化処理したいなら、[OnDeserialized]属性をつける

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

どなたでも編集できます