私は、テキスト ファイルを読み取り、いくつかの解析を行って C# オブジェクトに配置し、それをアプリで操作する単純な Winforms を作成しています。
ファイルを一度解析したいと思います。それから 1 週間離れてから戻ってきて、すべてのオブジェクトをアプリにロードし直します。
データベースに永続化したくないので、フックできる単純なオブジェクト永続化フレームワークがあることを望んでいました。
私は、テキスト ファイルを読み取り、いくつかの解析を行って C# オブジェクトに配置し、それをアプリで操作する単純な Winforms を作成しています。
ファイルを一度解析したいと思います。それから 1 週間離れてから戻ってきて、すべてのオブジェクトをアプリにロードし直します。
データベースに永続化したくないので、フックできる単純なオブジェクト永続化フレームワークがあることを望んでいました。
あなたはシリアライゼーションについて話している。
これについては、 を調べてくださいDataContractSerializer
。XML ではないファイルが必要な場合は、DataContractJsonSerializer
.
DataContract
および属性を追加するだけで、DataMember
シリアライザーにシリアライゼーションの管理方法を伝えることができます。
オブジェクトが変更されず (新しい/古い/名前が変更されたプロパティと可視性)、シリアライゼーション形式を読みたくない場合は、BinaryFormatter
.
フレームワークにはいくつかの古いシリアライザーがあります ( XmlSerializer
、BinaryFormatter
およびその他) が、シリアライゼーション形式を最適に制御するには、上記を使用します)。
アプリケーション設定またはユーザー設定を使用できます。プロジェクトのプロパティの下にあるウィザードを使用すると、非常に簡単です。これがそのチュートリアルです。
以前に提案されたようにシリアライゼーションを使用できます。
データを保存するのに適した場所は、Windows の LocalData フォルダーです。
Environment.SpecialFolder.LocalApplicationData
それらを XML ファイルにシリアル化できます。シンプル、迅速、簡単 (誰かがファイルをハッキングしない限り)。
BinaryFormatter
おそらくこれを行う最も簡単な方法は、クラスを使用して、オブジェクトをファイルに直接シリアル化することです。すべてのタイプがマークされていることを確認する必要がありますが[Serializable]
、このアプローチは迅速かつ簡単です。
以下は、任意のオブジェクト グラフの「読み取り」および「書き込み」メソッドの簡単な例です。
private void SerializeToFile(string fileName, object o)
{
var binaryFormatter = new BinaryFormatter();
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
binaryFormatter.Serialize(fileStream, o);
}
}
private object DeserializeFromFile(string fileName)
{
var binaryFormatter = new BinaryFormatter();
using (var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
return binaryFormatter.Deserialize(fileStream);
}
}
他のアプローチには、XmlSerialization (XmlSerializer
クラス) が含まれます。シリアル化されたオブジェクトを人間が読み取ったり編集したりできるようにしたい場合、または新しいDataContractSerializer
.
オブジェクトの状態を格納する最も単純な非 DB 方法はシリアライゼーションです。クラスを Serializable または DataContract としてマークし、BinaryFormatter (DataContract を使用した場合は DataContractSerializer) を使用して、オブジェクトを永続化可能な状態に変換します。これをファイルに保存して、アプリの起動時に読み込み、同様の方法で逆シリアル化することができます。子クラスを含むクラスのメンバーは、同じ方法でシリアル化可能である必要があり、ポインターやデリゲート参照などのシリアル化されていない要素への参照が失われることに注意してください。
データベースの何が問題になっていますか? セットアップと関連する問題を含む完全なエンジンを使用したくない場合は、「ファイル」ベースのデータベースを検討できます...
私の最初の困難は次のとおりです。
...
永続化するオブジェクトの複雑さに応じて、これは適切なソリューションになる可能性があります。