私はそれを非常に単純なデータアクセス層を備えたバイナリファイルに順番に保存することがよくあります。ここで使用できるアプローチはいくつかありますが、私はこれが最も好きです。かなりシンプルで高速です。ファイル内のエントリへのインデックステーブルを非常に簡単に作成することもできます。
class Foo {
private int _someInteger;
private string _someString;
public virtual void Serialize(BinaryWriter writer) {
writer.Write(2); // A simple versioning, start at 0, then increment.
writer.Write(_someString);
writer.Write(_someInteger);
}
public virtual void Deserialize(BinaryReader reader) {
int version = reader.ReadInt32();
switch (version) {
case 2: // the string was only added in version 2 of the class serialization.
_someString = reader.ReadString();
goto case 1;
case 1: // continue at case 1.
_someInteger = reader.ReadInt32();
break; // break here, because version 0 was very different.
case 0: // in version 0 of the class there was actually a double, but it was always an integral number, so this basically is a conversion case.
_someInteger = (int)reader.ReadDouble();
break;
}
}
}
書き込むのと同じ順序でファイルから読み取るように注意してください。
次に、ストリームからリーダーとライターを渡すことができます。
Foo fooInstance = new Foo();
FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fileStream);
fooInstance.Deserialize(reader);
これは非常に単純であり、常に問題を引き起こす愚かなXMLシリアライザークラスのset-accessorsを使用してすべてのフィールドとプロパティを公開する必要はありません。