.NET(C#)でデータをローカルに保存する最適な方法
質問
私は、ユーザー データを取得し、後で使用するためにローカルに保存するアプリケーションを書いています。アプリケーションはかなり頻繁に起動および停止されるので、アプリケーションの起動/終了時にデータを保存/ロードするようにしたいと思います。
データを本当に保護する必要がない (この PC にのみ保存される) ので、フラット ファイルを使用する場合はかなり簡単です。私が考えるオプションは次のとおりです。
- フラット ファイル
- XML
- SQL DB
フラットファイルはメンテナンスに少し手間がかかりますが (XML のような組み込みクラスがない)、XML を使ったことがないので、この比較的簡単なタスクに対して SQL は過剰なように思われます。
探索する価値のある他の手段はありますか?そうでない場合、これらのうちどれが最良の解決策なのでしょうか。
編集:問題にもう少しデータを追加するために、基本的に私が保存したいのは、次のようなDictionaryだけです。
Dictionary<string, List<Account>>
ここで、Accountは別のカスタムタイプです。
dictをxmlrootとしてシリアライズし、次にAccount型を属性としてシリアライズするのでしょうか?
更新2です。
というわけで、ディクショナリーをシリアライズすることは可能です。複雑なのは、このdictの値が、Account型の複雑なデータ構造のリストであるgenericそのものであることです。各Accountはかなり単純で、プロパティの束に過ぎません。
ここでのゴールは、試行錯誤の末にこうなったということだと理解しています。
<Username1>
<Account1>
<Data1>data1</Data1>
<Data2>data2</Data2>
</Account1>
</Username1>
<Username2>
<Account1>
<Data1>data1</Data1>
<Data2>data2</Data2>
</Account1>
<Account2>
<Data1>data1</Data1>
<Data2>data2</Data2>
</Account2>
</Username2>
ご覧の通り、平たく言えば
- ユーザー名(dictの文字列) >
- アカウント(Listの各アカウント) >
- アカウントデータ(クラスプロパティなど)。
このレイアウトを取得するために
Dictionary<Username, List<Account>>
からこのレイアウトを取得することが厄介であり、この質問の本質でもあります。
シリアライゼーションについては、ここにたくさんの「ハウツー」回答がありますが、これは私が早い段階で明確にしなかったため、私の責任です。
どのように解決するのですか?
ファイルを
JSON
. 名前と値のペアのリストである辞書を保存しているので、これはjsonがそのために設計されたものとほとんど同じです。
適切で無料の.NET json ライブラリがいくつかあります。
一つ
がありますが、最初のリンクで全リストを見ることができます。
関連
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み] 2つのリストを結合する
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] .NETで文字列を改行で分割する最も簡単な方法とは?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み] .NETコンソールアプリケーションでアプリケーションのパスを取得するにはどうすればよいですか?
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み] アプリケーションフォルダのパスを取得する最適な方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない