我正在编写一个应用程序,它获取用户数据并将其存储在本地供以后使用.这个应用程序会经常启动和停止,我想让它在应用程序开始/结束时保存/加载数据.

如果我使用平面文件,这将非常简单,因为数据实际上不需要保护(它将只存储在这台电脑上).因此,我认为有以下几种 Select :

  • 平面文件
  • XML
  • SQL数据库

平面文件需要花费更多的精力来维护(没有像XML那样的内置类),但是我以前没有使用过XML,对于这个相对简单的任务来说,SQL似乎有些过头了.

还有其他值得探索的途径吗?如果不是,以下哪项是最好的解决方案?


编辑:为了给这个问题添加更多的数据,基本上我唯一想存储的就是一本这样的字典

Dictionary<string, List<Account>> 

其中帐户是另一种自定义类型.

我会将dict序列化为xmlroot,然后将帐户类型序列化为属性吗?


更新2:

因此,可以对字典进行序列化.使它变得复杂的是,这个dict的值本身是一个泛型,它是Account类型的复杂数据 struct 的列表.每个帐户都相当简单,它只是一堆属性.

我的理解是,这里的目标是try 并以以下方式结束:

<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>

正如你所看到的,继承人是

  • Username (string of dict) >
  • Account (each account in the List) >
  • 帐户数据(即类属性).

Dictionary<Username, List<Account>>中获得这个布局是一个棘手的问题,也是这个问题的本质.

关于连载,这里有很多"如何"的回应,这是我的错,因为我没有在早期把它说得更清楚,但现在我正在寻找一个明确的解决方案.

推荐答案

我会将文件存储为JSON.因为你存储的字典只是一个名称/值对列表,所以这就是json设计的目的

.net相关问答推荐

PowerShell 5.1和7在使用证书时的区别

如何按需计算一个值并将该值缓存在FP/F#中?

将字符串与容差进行比较

将毫秒转换为人类可读的时间间隔

在 web api 控制器(.net 核心)中使用 async/await 或任务

泛型方法是如何、何时、何地具体化的?

File.ReadAllLines() 和 File.ReadAllText() 有什么区别?

如何创建只读依赖属性?

如何从字符串中删除所有字母字符?

如何比较 C# 中的(目录)路径?

在 C# 中将匿名类型转换为键/值数组?

当程序员说针对接口而不是对象的代码时,他们是什么意思?

List 和 IEnumerable 的实际区别

Environment.GetFolderPath(...CommonApplicationData) 在 Vista 上仍然返回C:\Documents and Settings\

WebClient.DownloadString 由于编码问题导致字符损坏,但浏览器正常

使用 LINQ 搜索树

如何在 C# 中处理 XML

绑定在代码隐藏中定义的对象

判断任意字符串是否为有效文件名的最简单方法

Dictionary.Add 与 Dictionary[key]=value 的区别