ユーザー設定を保持するための小規模でシンプルなローカル データ ストア

StackOverflow https://stackoverflow.com/questions/4400192

  •  25-09-2019
  •  | 
  •  

質問

私はこの小さな C# winforms アプリケーションを持っていますが、これは決して大きくなりません。2 つの入力フィールドと 1 つのボタンだけです。

方法に詳しい方いたら知りたいです 価値観 ユーザーが入力するもの ローカル データストア内. 。このシナリオでは 10 レコードが大量のデータであると考えることができます。

要件

  1. データベース側からのセットアップは必要ありません。(テーブル作成など)

  2. オブジェクトを与えるだけでそれを保存できるはずですが、それに時間を無駄にしたくありません。

  3. データはかなり簡単に取得できる必要があります。

  4. このように作成するすべての小さなアプリでこれを再利用できるようにしたいと考えています。

私のアイデア

  1. XML シリアル化され、ローカル設定フォルダーに保存される POCO オブジェクト。アプリのロード時に、このファイルは逆シリアル化されて POCO オブジェクトに戻されます。

  2. OODBMS:私はこれらを使用した経験はありませんが、これらは単一の dll で構成されているため、プログラムと一緒にパッケージ化するのは簡単だと常に考えていました。

  3. 私は昔、ユーザー設定をレジストリ内に保存するアプリケーションを構築したことがあります。ただし、それが今でも評価されているかどうかはわかりません。

最善のアプローチは何だと思いますか?

コードサンプルは大歓迎です!

役に立ちましたか?

解決

私は、アカウントに両方の答えを取って、次のように構築しました。

public static class IsolatedStorageExtensions
{
    public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
    {
        IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(writeStream, obj);
        writeStream.Flush();
        writeStream.Close();
    }

    public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
    {
        IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        T readData = (T)formatter.Deserialize(readStream);
        readStream.Flush();
        readStream.Close();

        return readData;
    }
}

AラッパーPOCOデータをシリアル化することを含むオブジェクト

[Serializable]
internal class DataStoreContainer
{
    public DataStoreContainer()
    {
        UserIDs = new List<int>();
    }

    public List<int> UserIDs { get; set; }
}

これらの拡張機能を消費します:

private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";

そして、あなたがデータを取得したい任意の方法で

_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);

データを保存するには:

_isoStore.SaveObject(_data, FILENAME);
scroll top