1. ホーム
  2. c#

.NET(C#)でデータをローカルに保存する最適な方法

2023-07-26 17:02:24

質問

私は、ユーザー データを取得し、後で使用するためにローカルに保存するアプリケーションを書いています。アプリケーションはかなり頻繁に起動および停止されるので、アプリケーションの起動/終了時にデータを保存/ロードするようにしたいと思います。

データを本当に保護する必要がない (この 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 ライブラリがいくつかあります。 一つ がありますが、最初のリンクで全リストを見ることができます。